我正在为 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"
在此先感谢您的帮助。
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] 删除。
我来说两句