【发布时间】:2021-04-17 08:22:13
【问题描述】:
我有一个具有以下文件布局的项目:
Project
├── CMakeLists.txt
├── app
│ ├── CMakeLists.txt
│ └── main.cpp
└── ext
├──CMakeLists.txt
└── lib
├── CMakeLists.txt
├── include
│ └── foo.h
└── foo.cpp
foo 是一个第三方库,我下载了我想在main.cpp 中使用的源代码。我可以使用以下 cmake 文件构建 main.cpp:
add_executable(app main.cpp)
target_include_directories(app PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/extern/foo/include)
target_link_libraries(app foo)
但是我觉得 foo 库应该有责任指定使用它时应该包含哪些文件。有没有办法在没有 target_include_directories 调用的情况下完成这项工作?
【问题讨论】:
-
只需为
foo库添加带有适当参数的target_include_directories。所以这些包含目录会自动传播给这个库的用户。 -
哇,这很容易。如果您发布答案,我可以接受。我是否正确假设在这种情况下 INTERFACE 是 lib 的正确包含关键字?既然 main.cpp 不应该传播它?
-
如果您的
foo库不使用foo.h标头,那么INTERFACE是正确的关键字。但很可能foo库实际上使用了foo.h标头,在这种情况下PUBLIC是正确的。
标签: cmake