【cmake学习(3)】vcpkg
CMake+Vcpkg
前面连接的都还是单一库文件或者头文件,而当前流行的是第三方库包的形式(package)。用Vcpkg管理第三方库包,再在CMakeLists.txt
中调用find_package()
,这就可以从被指定的路径中找到包的.cmake脚本,从而完成大型第三方库的导入。
vcpkg
在使用这种组合时,不需要用vcpkg new --application
来创建,但是也可以这样做。主要利用的是vcpkg的包文件,所以要添加CMAKE_TOOLCHAIN_FILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake
,链接到vcpkg工具库。
在vscode中,可以在“运行并显示命令”中使用cmake:select a kit选择要使用的编译工具,在cmake:open cmake tools extension settings的configure args中添加配置时要传递给cmake的参数,相当于
-D...
标记。
find_package()
find_package(Eigen3 REQUIRED)
#之后可以使用${Eigen3_DIR}、${Eigen3_INCLUDE_DIR}
是查找库这一步最主要的函数。它从vcpkg的文件夹中查找库的.cmake文件。
C:\src\vcpkg\installed\x64-windows
这个路径是集中了include、shared等用于链接的重要文件的路径。
CMAKE_PREFIX_PATH
这个路径指定了寻找各种文件的路径,这里主要取它作为<...>Config.cmake
父目录的性质。
设置该路径为上一步的路径,则find_<...>()
系列函数都可以从该路径出找到目标文件。
cmake_minimum_required (VERSION 3.10)
project (Transformation)
set(CMAKE_PREFIX_PATH "C:/src/vcpkg/installed/x64-windows")
find_package(Eigen3 REQUIRED)
message(${EIGEN3_INCLUDE_DIR})
message(${CMAKE_PREFIX_PATH})
message(${Eigen3_DIR})
add_executable (Transformation main.cpp)
target_link_libraries(Transformation Eigen3::Eigen)
使用包
可以直接使用target_link_libraries()
将包的名字空间连接到其他目标文件。
由于可能环境会莫名奇妙的修改你的CMAKE_PREFIX_PATH
,请在CMakeLists.txt
中显式定义它。
参考文献
[1]CMAKE_PREFIX_PATH — CMake 3.31.0-rc3 Documentation
[2][CmakeList][转载]Could not find a package configuration file provided by “Opencv“-CSDN博客