Cmake 与';查找包';:我如何知道链接必须使用哪些变量?
我使用Cmake 与';查找包';:我如何知道链接必须使用哪些变量?,cmake,Cmake,我使用find_package()查找一些库。我如何知道它定义了哪些变量,以便我可以使用它们来链接该库 例如,CMake成功运行了以下CMakeLists.txt,但是make在链接阶段失败,因为${DOCOPT\u LIBRARIES}为空 cmake_minimum_required(VERSION 3.1) project(test) set(PROJECT_LIBS "") find_package(docopt REQUIRED) include_directories(${DO
find_package()
查找一些库。我如何知道它定义了哪些变量,以便我可以使用它们来链接该库
例如,CMake成功运行了以下CMakeLists.txt
,但是make
在链接阶段失败,因为${DOCOPT\u LIBRARIES}
为空
cmake_minimum_required(VERSION 3.1)
project(test)
set(PROJECT_LIBS "")
find_package(docopt REQUIRED)
include_directories(${DOCOPT_INCLUDE_DIRS})
set(PROJECT_LIBS ${PROJECT_LIBS} ${DOCOPT_LIBRARIES})
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${PROJECT_LIBS})
但是我不知道还能尝试什么?查找包(XXX)结果的使用取决于此命令实际使用的脚本:
FindXXX.cmake
此文件随要使用它的项目一起提供,或随CMake一起提供。通常,这样的“查找”脚本以一些关于其用法的描述开始XXXConfig.cmake
或xxx config.cmake
“配置”脚本通常随软件包一起安装。通常,它们是由CMake使用特定的。您需要查阅软件包的文档以正确使用这些脚本target\u link\u库调用一起使用
可以扫描项目的CMakeLists.txt
以查找类似
install(TARGETS <targets...> EXPORT ...)
install(EXPORT ...)
如果它有NAMESPACE选项,则其值在所有导出目标之前
示例:
对于docopt包,其包含一行
install(TARGETS docopt EXPORT ${export_name} DESTINATION ${CMAKE_INSTALL_LIBDIR})
因此,它的docopt
目标被导出
作为导出文件的安装
install(EXPORT ${export_name} DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/docopt")
不包含命名空间选项,可以使用其原始名称访问导出目标:
find_package(docopt REQUIRED)
...
add_executable(${PROJECT_NAME} main.cpp)
# Use *IMPORTED* 'docopt' target
target_link_libraries(${PROJECT_NAME} docopt)
定义“链接失败”。实际的错误是什么?链接命令cmake
试图使用什么(make VERBOSE=1
将打印它)?@StephenNewell感谢您指出我描述中的缺点。我编辑过。make VERBOSE=1
的相关输出是c++-O3-DNDEBUG-Wl,-search\u paths\u first-Wl,-headerpad\u max\u install\u names CMakeFiles/test.dir/main.cpp.o-o test