我想链接通过彼此添加的项目add_subproject。假设我有一个这样的项目结构:
(root)
I--exec
I--"some source files"
I--CMakeLists.txt
I--lib
I--"some source files"
I--CMakeLists.txt
I--CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
有什么办法可以让我的根级别CMakeLists.txt排序为工作区文件?因此,它的行为就像.sln来自Visual Studio的?
我尝试过此操作,目的是让您了解我的意思:
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)
Run Code Online (Sandbox Code Playgroud)
显然,它在倒数第二行引发了配置错误,指出我无法执行此操作,因为exec不是由该文件(当前CMakeLists.txt?)构建的。有什么办法可以实现我想做的事吗?
对于CMake的> = 2.8.10,的使用target_link_libraries和target_include_directories不正确。
他们应该指定目标SYSTEM | BEFORE | PUBLIC | INTERFACE | PRIVATE; 在上以LINK_为前缀target_link_libraries。
附带说明一下,仅用于明确的依赖项管理(IMHO):
在您的根CMakeLists.txt中,不应有target_link_librariesnor target_include_directories,它们应位于子项目中。因此,例如,您的根CMakeLists应该是:
cmake_minimum_required(VERSION 2.8)
project(test)
add_subdirectory(lib)
add_subdirectory(exec)
Run Code Online (Sandbox Code Playgroud)
在您的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)
Run Code Online (Sandbox Code Playgroud)
在您的lib / CMakeLists.txt中:
add_library (lib libmain.cpp)
target_include_directories (lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)
我不确定是否会有所不同,但是我add_subdirectory在可执行文件之前使用了库。
| 归档时间: |
|
| 查看次数: |
2004 次 |
| 最近记录: |