【发布时间】:2023-03-31 02:27:01
【问题描述】:
我正在尝试使用 find_package 在 CMake 中包含库。
This question 讨论如何告诉 CMake 链接到 GMP library (external)。我正在尝试按照那里的答案步骤进行操作,但没有任何 <name>Config.cmake 或 <name>-config.cmake 文件,正如一些 cmets 所提到的,这似乎是默认设置。当您不知道如何获取/查找这些文件时,答案没有提及任何解决方案。该答案的 cmets 链接到一个旧的website (external),其中有很多断开的链接,它描述了一个加载模块列表。我不清楚这些模块来自哪里以及如何获得它们。
根据官方 CMake documentation (external),如果找不到配置文件,find_package 从“模块模式”回退到“配置模式”。我不明白这意味着什么以及在什么情况下这会相关,尤其是因为文档不鼓励阅读“配置模式”。
文档说
文件首先在 CMAKE_MODULE_PATH 中搜索,然后在 CMake 安装提供的 Find Modules 中搜索。
我仍然对这些配置文件是否应该随 CMake 或相关库一起提供以及它们应该位于何处感到困惑。可能两者都有可能,但在特定情况下如何知道?
示例代码,尝试遵循现代最佳实践:
# CMakeLists.txt (not working)
cmake_minimum_required(VERSION 3.2) # I have no idea what version I actually need
project (GMP_demo_project)
# Enable C++17 standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(GMP REQUIRED)
# Create the executable from sources
add_executable(GMP_demo GMP_demo.cpp)
target_link_libraries(GMP_demo gmp gmpxx)
代码输出错误消息
CMake Error at CMakeLists.txt:10 (find_package):
By not providing "FindGMP.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "GMP", but
CMake did not find one.
Could not find a package configuration file provided by "GMP" with any of
the following names:
GMPConfig.cmake
gmp-config.cmake
Add the installation prefix of "GMP" to CMAKE_PREFIX_PATH or set "GMP_DIR"
to a directory containing one of the above files. If "GMP" provides a
separate development package or SDK, be sure it has been installed.
问题:一般来说,如何获取和组织这些配置文件(CMake 加载模块)?怎么能指望其他用户在他的系统上拥有这些文件?我的问题是一般性的,仅以 GMP 为例(尽管我实际上对能够使用它感兴趣)。
顺便说一句,在按照库文档的建议安装 GMP 后,我可以使用 gcc GMP_demo.cpp -lstdc++ -lgmp 编译、链接和执行我的演示代码。问题只是让 CMake 去做。我也可以只为 CMake 提供库的绝对路径,这当然会更容易但不可移植(假设可以让 find_package 实际工作并通过合理的工作量进行移植)。
【问题讨论】:
-
gcc -lstdc++为什么不直接使用g++?