【发布时间】: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