gpt4 book ai didi

c++ - 将 CMake 子项目相互链接

转载 作者:太空狗 更新时间:2023-10-29 20:35:50 25 4
gpt4 key购买 nike

我想将通过 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)

显然,它在倒数第二行抛出一个配置错误,说明我不能这样做,因为 exec 不是由这个文件(当前的 CMakeLists.txt?)构建的。有什么方法可以实现我想做的事情吗?

最佳答案

对于 CMake >= 2.8.10,target_link_librariestarget_include_directories 的使用不正确。

他们应该指定目标 SYSTEM|BEFORE|PUBLIC|INTERFACE|PRIVATE;在 target_link_libraries 上以 LINK_ 为前缀。

作为旁注,只是为了清晰的依赖管理(恕我直言):

在您的根 CMakeLists.txt 中不应有 target_link_librariestarget_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

关于c++ - 将 CMake 子项目相互链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40850269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com