我正在尝试在单独的(并行)目录中组织库和目标。这似乎是一种自然的方式来组织文件给我,但我真的很新,不确定。我能够复制在线CMake教程,但它包含子目录中的lib而不是并行目录。
在下面的编码中,我尝试使用父作用域定义lib源/头的变量,然后尝试在根目录中添加库并使自定义目标依赖于它。然后我将lib链接到sub dir中的目标。显然我错过了一些东西,我无法弄清楚。
以下是我的目录结构:
在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)
答案 0 :(得分:0)
通常,库定义放在subdir和源定义中,即移动
add_library (lib_test STATIC
${lib_test_sources}
${lib_test_headers}
)
进入root/lib/CMakeLists.txt
。那么你就不需要PARENT_SCOPE
,它也应该有效。
请注意,您可能还需要添加
include_directories("lib")
如果app.cpp
包含test.h
,请找到位于子网址中的标题。