【问题标题】:CMake can't find include files of librariesCMake 找不到库的包含文件
【发布时间】:2021-08-15 23:41:50
【问题描述】:

我正在为 C/C++ CMake 项目构建一个简单的模板。基本上,遵循 cmake.org 自己的教程。和教程有点偏差,不知道是不是做错了。

所以,这是目录结构:

template
      +--- CMakeLists.txt
      +--- build/
      |        +--- default/
      +--- include/
      +--- myLibrary/
      |           +--- CMakeLists.txt
      |           +--- include/
      |           |          +--- mylibrary.h
      |           +--- src/
      |                  +--- myfunction.cpp
      +--- src/
             +--- mymain.cpp

这是模板/CMakeLists.txt

project(MyProjectName VERSION 1.0)

add_subdirectory(myLibrary)
    
add_executable(myexecutable src/mymain.cpp)
target_link_libraries(myexecutable PUBLIC MyFunctions)
target_include_directories(myexecutable PUBLIC "${PROJECT_BINARY_DIR}")

这是 template/myLibrary/CMakeLists.txt

add_library(MyFunctions src/myfunction.cpp)
target_include_directories(MyFunctions INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")

现在,为了让它工作,我的库程序 (template/myLibrary/src/myfunction.cpp) 必须包含它的头文件,如下所示:

#include "../include/mylibrary.h"

我觉得很奇怪,因为我已经声明了“我的库”的包含目录。我的意思是 template/myLibrary/CMakeLists.txt 中的这一行:

target_include_directories(MyFunctions INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")

我希望能够更直接地包含库头文件(?),像这样:

#include "mylibrary.h"

这就是它应该工作的方式吗?还是我错过了什么?

如果我不包含 (myfunction.cpp) 之类的标头#include "../include/mylibrary.h"。 或者,我没有声明包含目录 (myLibrary/CMakeLists.txt)target_include_directories(MyFunctions INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")。编译失败:

../../src/mymain.cpp:9:12: fatal error: 'mylibrary.h' file not found
#  include "mylibrary.h"

提前感谢您的帮助。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    INTERFACE 仅将 dir 放入 INTERFACE_INCLUDE_DIRECTORIES,而 PUBLIC 将 dir 放入 INTERFACE_INCLUDE_DIRECTORIES 和 INCLUDE_DIRECTORIES。所以你需要使用 PUBLIC

    target_include_directories(MyFunctions PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
    

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2019-09-08
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多