“package”目录中多个子库的Cmake配置

时间:2016-01-25 18:37:38

标签: c++ cmake

Here是我尝试使用“Packages”目录构建的示例项目,其中包含要在主代码中使用的所有库。

我试图让我的根cmake文件尽可能干净,并避免相对路径,如

include_directory(packages/lib1)
但是我很挣扎。是否有一种方法可以包含目录的子目录以便包含头。

1 个答案:

答案 0 :(得分:1)

首先是一些小的评论:

include_directories(DIR1 [DIR2 [...]])
告诉CMake编译器应该在哪里查找头文件,即-IDIR1 -IDIR2 ...

add_library(NAME [STATIC|SHARED] SOURCES)
此命令创建所需的编译器命令,以从给定的源文件列表中创建静态或共享库。无需添加头文件。 make目标将被称为NAME,并且库目标被CMake称为NAME

add_subdirectory(DIR)
告诉CMake调查DIR并解析包含的CMakeLists.txt及其所有内容。

target_link_libraries(TARGET LIB1 [LIB2 [...]])
告诉CMake指示链接器将LIB1LIB2等链接到TARGET,即-LLIB1 -LLIB2 ...TARGET是之前通过调用add_{library,executable,custom_target}定义/创建的CMake / make目标。

<强>的CMakeLists.txt

include_directories(libraries)
# a header file in `libraries/lib1/foo.hpp` can be included
# in the whole CMake project by `#include "lib1/foo.hpp"`.
add_subdirectory(libraries)
add_subdirectory(tests)

<强>库/的CMakeLists.txt

add_subdirectory(lib1)
add_subdirectory(lib2)

<强>库/ LIB1 /的CMakeLists.txt

add_library(lib1 STATIC ${LIB1_SOURCES})

<强>库/ LIB2 /的CMakeLists.txt

add_library(lib2 STATIC ${LIB2_SOURCES})

<强>测试/的CMakeLists.txt

add_executable(tests ${TEST_SOURCES})
target_link_libraries(tests lib1 lib2)