gpt4 book ai didi

c++ - 为什么我无法包含 cmake 导出/导入库中的头文件

转载 作者:行者123 更新时间:2023-11-28 04:42:56 25 4
gpt4 key购买 nike

我正在尝试使用 CMake 编写一个仅供其他人导入的 header 库。我试图按照 Daniel Pfeifer 的说明进行操作 - “Effective CMake”。但是我无法将头文件包含到另一个项目中。出于说明目的,我创建了一个类似的具有树结构的玩具项目:

├── testinclude
│ ├── CMakeLists.txt
│ └── testinclude.cpp
└── testlib
├── CMakeLists.txt
├── include
│ └── testLib.h
└── testLibConfig.cmake

虽然库应该包含 testLib.h

void sayHello(){
std::cout<<"Hello"<<'\n';
}

可执行文件 testinclude.cpp 的源代码如下所示:

#include"testLib.h"

int main(){
sayHello();
return 0;
}

尝试遵循 Daniel Pfeifers 指南,我在目录 teSTLib 中的 CMakeLists.txt 看起来像:

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")

最后结束testinclude目录下的CMakeLists.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 的错误,即使我之前没有提示或错误。

最佳答案

Tsyvarev 的评论绝对正确。另外安装公共(public)头文件“testLib.h”(到一些独立于项目的位置)是缺少的事情。添加行

install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/testLib.h" DESTINATION
include/testLib )

到“testLib/CMakeLists.txt”解决了问题。

关于c++ - 为什么我无法包含 cmake 导出/导入库中的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49841105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com