如何修复创建使用 PRIVATE include_directories 的库的 cmake 配置
Posted
技术标签:
【中文标题】如何修复创建使用 PRIVATE include_directories 的库的 cmake 配置【英文标题】:How do I fix my cmake configuration which creates a library that uses PRIVATE include_directories 【发布时间】:2019-04-16 08:36:53 【问题描述】:我正在学习如何编写“现代”cmake 配置,并尝试将库链接到可执行文件。我的测试项目结构如下:
.
|-- foo
| |-- src
| | |-- foo.cpp
| | `-- foo_impl.cpp
| |-- include
| | `-- foo
| | `-- foo.h
| |-- internal
| | `-- foo_impl.h
| `-- CMakeLists.txt
|-- src
| `-- main.cpp
`-- CMakeLists.txt
./CMakeLists.txt 是
cmake_minimum_required(VERSION 3.12)
project(test_cmake LANGUAGES CXX)
add_subdirectory(foo)
add_executable(test_executable
src/main.cpp
)
target_include_directories(test_executable
PRIVATE
include
foo
)
./foo/CMakeLists.txt 是
cmake_minimum_required(VERSION 3.12)
add_library(foo
src/foo_impl.cpp
src/foo.cpp
)
target_include_directories(foo
PUBLIC
include
PRIVATE
$CMAKE_CURRENT_SOURCE_DIR
)
这种配置的原因是为了测试 cmake 是否将“foo/internal”文件夹暴露给库 foo 的客户端。
-
与库 foo 链接时遇到困难。
无法在客户端代码中使用 #include "foo/foo.h"。
我的配置有误吗?
【问题讨论】:
【参考方案1】:您的 cmake 中有类型/错误。
在 CMakeLists.txt 你这样做:
target_include_directories(test_executable
这将添加包含目录。你需要链接foo
项目:
target_link_libraries(test_executable
PRIVATE foo)
【讨论】:
以上是关于如何修复创建使用 PRIVATE include_directories 的库的 cmake 配置的主要内容,如果未能解决你的问题,请参考以下文章