c++ - 仅标头库的 cmake 错误:`include 找不到加载文件`
问题描述
我一直在尝试将 makefile c++ 项目更改为 cmake 项目,并且遇到了一些困难。cmake
似乎正在寻找东西/usr/local/lib/
而不是,/usr/local/include/
我不确定为什么会这样。
这个库是纯头文件,所以我一直在关注本教程我的纯头文件库include
似乎“构建”得很好,但是当我尝试生成一个生成文件来构建我的示例程序时,我不断收到以下错误:
me:~/pf/examples/build$ cmake ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /usr/local/lib/cmake/pf/pfConfig.cmake:27 (include):
include could not find load file:
/usr/local/lib/cmake/pf/pf_exampleTargets.cmake
Call Stack (most recent call first):
CMakeLists.txt:15 (find_package)
examples/CMakeLists.txt
创建另一个新项目:
project(pf_example)
cmake_minimum_required (VERSION 3.12)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_STANDARD 17)
# "install" pf
find_package(pf CONFIG REQUIRED)
find_package(Eigen3 3.3 REQUIRED NO_MODULE)
file(GLOB SOURCES ${PROJECT_NAME}/*.{h,cpp})
message("${SOURCES}")
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} pf::pf)
根目录CMakeLists.txt
文件比较复杂。这是根据我上面提到的教程改编的:
cmake_minimum_required(VERSION 3.12)
project("pf" VERSION 1.0.1
DESCRIPTION "A header only c++ template library for fast particle filtering."
HOMEPAGE_URL "https://github.com/tbrown122387/pf")
include(GNUInstallDirs)
add_library(${PROJECT_NAME} INTERFACE)
target_include_directories(
${PROJECT_NAME}
INTERFACE $<BUILD_INTERFACE:${${PROJECT_NAME}_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_compile_features(${PROJECT_NAME} INTERFACE cxx_std_17)
install(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}_Targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
include(CMakePackageConfigHelpers)
write_basic_package_version_file("${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)
configure_package_config_file(
"${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION
${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake)
install(EXPORT ${PROJECT_NAME}_Targets
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake)
install(FILES "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake)
install(DIRECTORY ${PROJECT_SOURCE_DIR}/include DESTINATION include)
为了安装这个只有头文件的库,在我尝试构建示例项目之前,我在命令行中输入了以下命令:
cd ~/pf
mkdir build
cd build/
cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/include
sudo cmake --build . --config Release --target install -- -j $(nproc)
我没有发布它,但还有一个文件cmake/pfconfig.cmake.in
是从上面的教程中逐字复制的。
解决方案
您的安装前缀指定为,/usr/local/include
因此文件将安装为:
- 标头进入
/usr/local/include/include
- 图书馆进入
/usr/local/include/libs
- cmake 东西到
/usr/local/include/share/${PROJECT_NAME}/cmake
这些路径是错误的。只需设置CMAKE_INSTALL_PREFIX=/usr/local
(即删除include)
并将其安装在/usr/local/
树内。
推荐阅读
- javascript - 循环事件侦听器添加时索引变量呈现为文字而不是值
- android - 活动转换 API 不起作用
- php - 如何从数据库中获取下拉项目到 PHP 选择下拉表单字段
- python - “pip install models”-“python setup.py egg_info”失败,错误代码为 1
- android - 弹出键盘时看到当前Activity下的Activity
- angular - 无法以角度 6 将具有反应形式的表单数据发送到 api 端点
- sql-server - 如何更改索引?
- swift - 从控制台应用程序中选择日历对话框窗口
- android-studio - android studio 以太坊钱包加载消息
- java - 如何使用 log4j.properties 使日志文件根据大小旋转并压缩