如何修复创建使用私有include\u目录的库的cmake配置

如何修复创建使用私有include\u目录的库的cmake配置,cmake,Cmake,我正在学习如何编写“现代”cmake配置,并试图创建一个库与可执行文件的链接。我的测试项目结构如下所示: . |-- foo | |-- src | | |-- foo.cpp | | `-- foo_impl.cpp | |-- include | | `-- foo | | `-- foo.h | |-- internal | | `-- foo_impl.h | `-- CMakeLists.txt |-- src | `

我正在学习如何编写“现代”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
  )
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}
  )
/foo/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
  )
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的客户端公开“foo/internal”文件夹

  • 与库foo链接有困难
  • 无法在客户端代码中使用#include“foo/foo.h”

  • 我的配置有错误吗?

    您的cmake中有一个类型/错误

    在CMakeLists.txt中,您可以执行以下操作:

    target_include_directories(test_executable
    
    这将添加include目录。您需要链接到
    foo
    项目:

    target_link_libraries(test_executable
        PRIVATE foo)
    

    您的cmake中有一个类型/错误

    在CMakeLists.txt中,您可以执行以下操作:

    target_include_directories(test_executable
    
    这将添加include目录。您需要链接到
    foo
    项目:

    target_link_libraries(test_executable
        PRIVATE foo)