将CMAKE子标记彼此链接
Link CMake subprojects with one another
我想将通过add_subproject
添加的项目互相链接。假设我有这样的项目结构:
(root)
I--exec
I--"some source files"
I--CMakeLists.txt
I--lib
I--"some source files"
I--CMakeLists.txt
I--CMakeLists.txt
有没有某种方法可以使我的根级cmakelists.txt作为工作空间文件?因此,它的行为就像来自Visual Studio的.sln
?
我尝试了一下,以使您了解我的意思:
cmake_minimum_required(VERSION 2.8)
project(test)
add_subdirectory(exec)
add_subdirectory(lib)
target_link_libraries(exec lib)
target_include_directories(exec lib/include)
显然,它在第二个最后一行中引发了一个配置错误,说我不能这样做,因为该文件不是由该文件构建的(当前的CMakeLists.txt
?)。有什么方法可以实现我想做的事?
对于cmake> = 2.8.10, target_link_libraries
和 target_include_directories
的使用不正确。
他们应在| public |接口| private之前指定目标系统。由 target_link_libraries
上的link_前缀。
作为旁注,仅用于明确的依赖管理(IMHO):
在您的root cmakelists.txt中,不应有target_link_libraries
和target_include_directories
,它们应该在子标题中。因此,例如,您的根CMakelists应该是:
cmake_minimum_required(VERSION 2.8)
project(test)
add_subdirectory(lib)
add_subdirectory(exec)
在您的exec/cmakelists.txt中:
add_executable (exec main.cpp)
target_link_libraries (exec LINK_PUBLIC lib)
target_include_directories (exec PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../lib)
在您的lib/cmakelists.txt中:
add_library (lib libmain.cpp)
target_include_directories (lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
我不确定它是否有所不同,但是我在可执行文件之前使用 add_subdirectory
作为库。
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 无法链接 CMake 中的本地库
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 在 CMake 中为每个目标设置编译器/链接器标志
- 链接 cmake 时出现未定义的引用错误
- 如何将GTest与CMake一起使用?遵循谷歌指南时的链接问题
- 将 SDL2 与 CMake 链接起来
- CMake 库链接使用两个不同的编译器版本
- CMake 无法链接外部库
- CMake - 更改共享库链接选项
- CMake 3.5 中的链接器标志位置
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 如何避免在 cmake 中自动链接 Qt5 库?
- 将源中的 GLEW 与 cmake 静态链接
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- 找不到 CMake 链接的库
- Opencv 链接 CMAKE 不起作用 Ubuntu 16.04 Docker
- 如何在没有外部脚本的情况下链接CMake和SQLite
- 链接CMake的Openscenegraph库