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

标签 c++ cmake

我正在尝试在单独的(并行)目录中组织库和目标。这对我来说似乎是组织文件的自然方式,但我真的很新并且不确定。我能够复制在线 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/

相关文章:

c++ - 在 Visual Studio 2013 中的可用模板中添加项目

c++ - cilk reduce 是如何完成的(thread vs smid)

c++ - CUDA opencv 构建失败 - 缺少实际存在的文件

c++ - CMAKE 找不到 GUROBI 外部库

c++ - 如何在不全局添加目录的情况下将包含目录添加到 swig cmake 目标?

c++ - 有效地连接几个 vector

c++ - 任务栏编程

c++ - rapidxml first_node 不返回 null

C++ GL 链接器 undefined reference

android - 错误 : undefined reference to 'cv::String::deallocate()'