CMake 找不到库的包含文件

何塞·奥特罗

我正在为 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}")

这是模板/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"

在此先感谢您的帮助。

u-235

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章