Here是我尝试使用“Packages”目录构建的示例项目,其中包含要在主代码中使用的所有库。
我试图让我的根cmake文件尽可能干净,并避免相对路径,如
include_directory(packages/lib1)
但是我很挣扎。是否有一种方法可以包含目录的子目录以便包含头。
答案 0 :(得分:1)
首先是一些小的评论:
CMakeLists.txt
(because of) 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指示链接器将LIB1
,LIB2
等链接到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)