为什么我无法包含来自 cmake 导出/导入库的头文件
Why am I not able to include header file from cmake exported/imported library
我正在尝试使用 CMake 编写一个仅供其他人导入的标头库。我试图遵循Daniel Pfeifer的指示 - "有效的CMake"。但是,我无法将头文件包含在另一个项目中。为了便于说明,我创建了一个类似的玩具项目,具有树形结构:
├── testinclude
│ ├── CMakeLists.txt
│ └── testinclude.cpp
└── testlib
├── CMakeLists.txt
├── include
│ └── testLib.h
└── testLibConfig.cmake
而库应该是 testLib.h 包含
void sayHello(){
std::cout<<"Hello"<<'n';
}
可执行测试的源代码包括.cpp如下所示:
#include"testLib.h"
int main(){
sayHello();
return 0;
}
试图遵循Daniel Pfeifers指南,我的CMakeLists.txt在目录中testlib看起来像:
cmake_minimum_required(VERSION 3.5)
project(testLib VERSION 0.1)
add_library(testLib INTERFACE )
target_include_directories(testLib INTERFACE
$<INSTALL_INTERFACE:include>
)
install(TARGETS testLib EXPORT testLibTargets
INCLUDES DESTINATION include
)
install(EXPORT testLibTargets
FILE testLibTargets.cmake
NAMESPACE testLib::
DESTINATION lib/cmake/testLib
)
include(CMakePackageConfigHelpers)
write_basic_package_version_file("testLibConfigVersion.cmake"
VERSION ${testLib_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES "testLibConfig.cmake" "testLibConfigVersion.cmake"
DESTINATION lib/cmake/testLib
)
和testLibConfig.cmake:
include("${CMAKE_CURRENT_LIST_DIR}/testLibTargets.cmake")
最后结束 CMakeList .txt 在目录中测试包括:
cmake_minimum_required(VERSION 3.5)
project(testInclude)
add_executable(testInclude testinclude.cpp)
find_package(testLib)
target_link_libraries(testInclude PRIVATE testLib::testLib)
在目录 testlib 中运行后:
cmake .
sudo make install
并在 testinclude 目录中运行:
cmake .
make
我收到错误,testLib.h未找到,即使我之前没有抱怨或错误。
齐瓦列夫的评论是绝对正确的。此外,将公共头文件"testLib.h"(安装到独立于项目的某个位置(是缺少的事情。添加行
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/testLib.h" DESTINATION
include/testLib )
到"testLib/CMakeLists.txt"修复了问题。
我认为您的安装不包括头文件。使用set_target_properties(tgt PROPERTIEs PUBLIC_HEADER "${HEADER_FILES}")
并在安装中PUBLIC_HEADER以安装它们(警告不允许子目录(
此外,不应使用安装中的"包含目标",请尝试使用target_include_directories()
代替("包含"是对前现代CMake的回忆(。当您要添加安装包含目录时,它只是需要...
否则对我来说似乎很好...例如 https://github.com/Mizux/cmake-cpp/blob/master/Foo/CMakeLists.txt来源:https://cmake.org/cmake/help/latest/prop_tgt/PUBLIC_HEADER.html
- 无法将标准库导入本机 android 项目中的头文件
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- C++20 使用 Visual Studio 编译模块:不编译或导入 ixx 文件
- Assimp - 如何使用任何文件格式导入带有纹理的网格?
- 链接器找不到导入的 DLL 的 LIB 文件
- 如何在 c++ 中导入文件?以及如何成功编译它们?
- 从文件导入数据时遇到问题.我有一个没完没了的循环
- 如何在Windows窗体应用程序中打开txt文件并将行导入文本框
- CMake GoogleTests在我的测试文件中找不到导入的头文件
- 移植DXUT SDKMesh以导入OBJ文件,在哪里添加纹理坐标和索引
- 使用 GDAL 将 DXF 块从一个文件导入到另一个文件
- 如何从 Makefile 中的其他目录导入所有源代码和头文件
- 如何在 C++ 中使用特征库导入矩阵市场文件
- 我将如何在C++中文件处理对象(存储/导入)
- 如何使用C++ GPGME 导入 GPG 密钥和解密文件
- 如何修复在glm中导入h文件'duplicate symbol'
- 初学者c++导入文件,查找sum和average
- 导入文件txt时出错
- C++程序如何从".a"文件导入文件,但您不能自己反转".a"文件?
- 导入文件存在于eclipse C++Linux项目中