【发布时间】:2019-04-10 12:34:55
【问题描述】:
我开始了一个新的 C++ 项目,尝试使用 boost program_options。不幸的是,我在使用 cmake 时遇到了麻烦;根据我的尝试,我要么得到一个 gmake 错误,无法构建文件,要么得到另一个关于不包含 % 的目标模式的错误。
实际错误是:
使用 ${Boost_LIBRARIES} 时(案例 1):gmake 错误:没有构建 /usr/local/lib/libbooost_program_options.so 的规则
使用 Boost::program_options 时(案例 2):gmake 错误:目标模式不包含“%”。停下来。
我的解决方案尝试来自这个 SO 线程:How to link C++ program with Boost using CMake
关于案例 1:this 提供了针对此问题的分步指南。不幸的是,在第一步“检查文件是否存在”之后,没有提示如果它确实存在该怎么办,在我的例子中就是这样。
stat /usr/local/lib/libboost_program_options.so
Datei: /usr/local/lib/libboost_program_options.so -> libboost_program_options.so.1.62.0
其他线程,例如"No rule to make target" error in cmake when linking to shared library 建议使用查找器脚本,我已经这样做了。
编辑:感谢评论,结果我对部分错误消息视而不见:插入生成文件的路径是“Boost::program_options-NOTFOUND”,这显然会导致错误。
关于案例 2:Target pattern contains no '%'. Makefile 暗示这是我的任何路径的路径问题。我对如何进一步调试问题一无所知,因为调试 cmake 脚本似乎没有得到很好的支持。在任何搜索引擎上都很难找到这方面的信息。
我使用的两个版本的 cmake 脚本是这样的:
cmake_minimum_required(VERSION 3.13)
project(probsim)
set(CMAKE_CXX_STANDARD 17)
FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED )
add_executable(probsim main.cpp)
target_link_libraries(probsim ${Boost_LIBRARIES})
# alternative: target_link_libraries(probsim Boost::program_options)
结果是:
-- Boost version: 1.62.0
-- Found the following Boost libraries:
-- program_options
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ketzu/CLionProjects/probsim/cmake-build-debug
总结:Cmake 以某种方式创建了一个无效的 makefile,原因似乎与我的文件系统上使用的路径有关。
【问题讨论】:
-
"关于案例 2:[目标模式不包含 '%'。Makefile] 暗示这是我的任何路径的路径问题。我对如何进一步调试问题一无所知" - 你可能从 查看导致错误的 Makefile 行 开始。 Makefile 的路径和错误行打印在错误消息中。至于缺少的文件
/usr/local/lib/libboost_program_options.so,您需要安装提供给定文件的包。要查找软件包名称,只需 google 搜索“”。 -
@Tsyvarev 感谢案例 2 的提示,我对此一无所知。这有帮助。我将对其进行编辑。关于案例 1 和软件包的安装:据我所知,该文件存在并且已经安装了 boost-devel。