CMake:如何从并行目录链接库

时间:2017-06-10 16:21:13

标签: c++ cmake

我正在尝试在单独的(并行)目录中组织库和目标。这似乎是一种自然的方式来组织文件给我,但我真的很新,不确定。我能够复制在线CMake教程,但它包含子目录中的lib而不是并行目录。

在下面的编码中,我尝试使用父作用域定义lib源/头的变量,然后尝试在根目录中添加库并使自定义目标依赖于它。然后我将lib链接到sub dir中的目标。显然我错过了一些东西,我无法弄清楚。

以下是我的目录结构:

  • 根/
  • root / lib / test.cpp,test.h
  • root / 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)

1 个答案:

答案 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,请找到位于子网址中的标题。