如何在没有无限循环的情况下使用 CMake 的add_subdirectory
How do I use CMake's add_subdirectory without endless loops
我有一个要使用OpenCV和googletest构建的应用程序。有了我得到的cmakelists.txt,我得到了一个无尽的循环,cmake不断将googletest目录添加到build dir。
我添加了GoogleTest作为一个子目录(即使它不在实际项目树中),因为我阅读了为每个项目重新编译的,这会防止各种麻烦。当我删除add_subdirectory
线时,不再有无尽的循环。
我的cmake文件:
cmake_minimum_required(VERSION 2.8.4)
project(imageprocessing)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
IF(NOT DEFINED ENV{OpenCV_DIR})
set(ENV{OpenCV_DIR} "/usr/local/opencv")
ENDIF(NOT DEFINED ENV{OpenCV_DIR})
MESSAGE("Using OpenCV from location: " $ENV{OpenCV_DIR} " (Override by exporting OpenCV_DIR)")
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
file(GLOB SOURCE_FILES "src/main/cpp/*.cpp")
add_executable(imageprocessing ${SOURCE_FILES})
target_link_libraries(imageprocessing ${OpenCV_LIBS} ) # <-- Line 16.
##########
# TESTING
##########
enable_testing()
IF(NOT DEFINED ENV{GOOGLETEST_DIR})
set(ENV{GOOGLETEST_DIR} "/usr/local/googletest/gtest-1.7.0")
ENDIF(NOT DEFINED ENV{GOOGLETEST_DIR})
MESSAGE("Using Google Test from location: " $ENV{GOOGLETEST_DIR} " (Override by exporting GOOGLETEST_DIR)")
add_subdirectory("${GOOGLETEST_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/lib_googletest") # <-- EXCLUDE_FROM_ALL does not make a difference.
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
##############
# Unit Tests
##############
file(GLOB TEST_SOURCE_FILES "src/test/cpp/*.cpp")
add_executable(runUnitTests ${TEST_SOURCE_FILES})
target_link_libraries(runUnitTests gtest gtest_main)
add_test(NAME test_images COMMAND runUnitTests)
弹出的错误消息:
CMake Error at CMakeLists.txt:16 (target_link_libraries):
Attempt to add link library "opencv_core" to target "imageprocessing" which is not built in this directory.
我的环境:
$ cmake -version
cmake version 2.8.12.2
有助于使用正确的变量。
摘要来自问题:
IF(NOT DEFINED ENV{GOOGLETEST_DIR})
set(ENV{GOOGLETEST_DIR} "/usr/local/googletest/gtest-1.7.0")
ENDIF(NOT DEFINED ENV{GOOGLETEST_DIR})
MESSAGE("Using Google Test from location: " $ENV{GOOGLETEST_DIR} " (Override by exporting GOOGLETEST_DIR)")
add_subdirectory("${GOOGLETEST_DIR}" # <-- THIS SHOULD READ $ENV{GOOGLETEST_DIR}!
"${CMAKE_CURRENT_BINARY_DIR}/lib_googletest") # <-- EXCLUDE_FROM_ALL does not make a difference.
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用CMake创建QML插件
- cmake如何在fedora工作站中找到boost静态库包
- 使用CMake检测支持的C++标准
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 如何使用CMake编译.proto文件来生成.grpcp.pb.cc和.grpc.pb.h文件
- cmake在我的项目中所需的所有静态库都不成功
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 无法链接 CMake 中的本地库
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何在Ubuntu中使用cmake设置qt4
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 为什么 cmake 许可证<>样式不包括?
- cmake更新缓存的变量
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- Visual Studio - Cmake Project - Add NetCDF
- CMake add library libpq (postgreSQL) mac c++ clion
- 为什么 cmake 在定义 CXX 时忽略 ADD(SYSTEM) 头文件?