我有一个具有以下文件结构的项目:
project
|
|-------> lib1
| |----> lib1.h
|
|-------> lib2
| |----> lib2.h
|
|-------> main.cc
The two libs lib1
and lib2
only contain header files while lib2.h
includes lib1.h
, and main.cc
includes lib2.h
。
我现在如何为这个项目编写 cmake 文件?我试图为 lib2
创建一个 接口库,但是编译器找不到 lib1.h
。以下是我的 cmake 文件的内容:
lib2 的 CMakeLists.txt:
add_library(lib2 INTERFACE)
target_sources(lib2 INTERFACE lib2.h)
target_include_directories(lib2 INTERFACE ../lib1/lib1.h)
整个项目的 CMakeLists.txt:
add_executable(project main.cc)
target_link_libraries(project lib2)
cmake 文件有什么问题?
原文由 X. Liu 发布,翻译遵循 CC BY-SA 4.0 许可协议
如评论中所述,应为
target_include_directories
提供目录的路径,而不是文件的路径。此外,如果你想在
lib2
创建一个依赖lib1
,你应该通过target_link_libraries
来完成:依赖项不仅包括目录,还包括目录关于编译选项、定义、目标属性…target_sources
不适用于接口库。从 这个答案 中,您可以使用不带命令的自定义目标将源关联到目标而不影响构建过程(对于 msvc、QtCreator 和其他基于 GUI 的工具,这使得源可以通过 IDE 访问;AFAIK 它对其他构建工具)。您的 cmake 可能如下所示:
高级提示:您可以在
target_include_directories
中为构建树和安装树指定不同的目录(参见 文档):