【发布时间】:2018-08-25 11:37:51
【问题描述】:
例如,我有一个如下所示的项目:
project/
subproject/
CMakeLists.txt
file1.h
CMakeLists.txt
main.cpp
项目/CMakeLists.txt
project(some_project)
add_subdirectory(subproject)
set(SOURCE_FILES main.cpp)
add_executable(main ${SOURCE_FILES})
target_link_libraries(main subproject)
项目/子项目/CMakeLists.txt:
project(subproject)
add_library(subproject_lib INTERFACE)
target_sources(subproject_lib INTERFACE file1.h)
target_include_directories(subproject_lib INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
项目/main.cpp
#include <file1.h>
// .. do something
现在,当我尝试构建 project 时,我得到一个 No such file or directory error。
另一个例子是当我尝试包含 dlib 时。当我做类似的事情时
add_subdirectory(dlib-19.9)
target_link_libraries(main dlib::dlib)
这似乎正是 dlib 自己的示例 CMakeList.txt 中的内容,我收到错误消息。
那么,如何以正确的方式在 CMake 中包含库?
【问题讨论】:
-
对于
include<>,您需要确保 target_include_directories(subproject_lib) 包含 SYSTEM 参数关键字 -
@RichardHodges 仍然不起作用。使用
include ""它可以工作... -
@RichardHodges 与否。只是
include ""在当前目录下搜索头文件,并不是CMake正确调用了-I编译选项 -
也可以在subproject/cmakelists.txt中添加:
add_library(subproject::subproject ALIAS subproject)。所以在主 cmake 中你可以使用 subproject::subproject (如果以后你选择通过 find_package install export/namespace 的东西,命名相同)也避免你的名字中的 lib 否则文件在 Linux 上变成 libsubproject_lib.so -_- (或者你需要重命名 output_library_name...)