如何修复创建使用 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 配置的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“错误:‘_1’未在此范围内声明”?

如何在取消设置变量后修复会话未启动

如何修复 C3861:“...”:找不到标识符 [重复]

使用operator ==进行结构重载

luogu_1111 修复公路

C#如何创建一张access 表格