我正在尝试在单独的(并行)目录中组织库和目标。这对我来说似乎是组织文件的自然方式,但我真的很新并且不确定。我能够复制在线 CMake 教程,但它在子目录而不是并行目录中包含库。
在下面的编码中,我尝试为具有父范围的 lib 源/ header 定义变量,然后尝试在根目录中添加库并使自定义目标依赖于它。然后我将库链接到子目录中的目标。显然我错过了一些东西而且我无法弄清楚。
下面是我的目录结构:
- 根/
- root/lib/test.cpp,test.h
- 根/app1/app.cpp,app.h
在 root/CMakeLists.txt 中:
...
add_subdirectory(lib)
add_library (lib_test STATIC
${lib_test_sources}
${lib_test_headers}
)
add_custom_target(test DEPENDS lib_test)
在root/lib/CMakeLists.txt中
set(lib_test_sources
${lib_test_sources}
${CMAKE_CURRENT_SOURCE_DIR}/test.cpp
PARENT_SCOPE
)
set(lib_test_headers
${lib_test_headers}
${CMAKE_CURRENT_SOURCE_DIR}/test.h
PARENT_SCOPE
)
在 root/app1/CMakeLists.txt 中:
add_executable(test_app app.cpp)
target_link_libraries(test_app lib_test)
最佳答案
通常,库定义和源定义一起放在子目录中,即移动
add_library (lib_test STATIC
${lib_test_sources}
${lib_test_headers}
)
进入root/lib/CMakeLists.txt
。那么您就不需要 PARENT_SCOPE
并且它应该也能工作。
请注意,您可能还需要添加
include_directories("lib")
如果 app.cpp
包含 test.h
,则查找位于子目录中的 header 。
关于c++ - CMake:如何从并行目录链接库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44475527/