案例1. 我通常使用 vcpkg 安装 cxx 库。 我使用 Clion 来构建和运行我的项目。我的CLion版本是2024.1.1
我在 CLion 设置上设置 -DCMAKE_TOOLCHAIN_FILE=/path/to/my/vcpkg/scripts/buildsystems/vcpkg.cmake 。 设置路径为:Settings - Build, Execution, Deployment - CMake - CMake options,如图所示: 在此输入图片描述
案例2 有时我也会下载源码,不用vcpkg编译。 我最近使用boost_1_85_0。 我在特定路径中编译并安装了版本boost。 如果我像情况 1 那样设置 CMAKE_TOOLCHAIN_FILE,CLion 找不到 boost 包。 因此,我删除了 CLion 上的 CMAKE_TOOLCHAIN_FILE 设置。 并在 CMakeLists.txt 中添加 CMAKE_PREFIX_PATH 设置,如下所示:
cmake_minimum_required(VERSION 3.24)
set(PROJECT_NAME vcpkg_and_singlelib)
project(${PROJECT_NAME})
set(CMAKE_CXX_STANDARD 17)
add_executable(${PROJECT_NAME} main.cpp)
set(BOOST_ROOT "Path/to/boost/installed/boost_1_85_0_install_default")
set(CMAKE_PREFIX_PATH "${BOOST_ROOT}")
find_package(Boost 1.85.0 REQUIRED COMPONENTS system thread date_time log log_setup program_options)
target_include_directories(${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system Boost::thread Boost::date_time Boost::log Boost::log_setup Boost::program_options)
find_package(RapidJSON CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE rapidjson)
但是 CLion 找不到 vcpkg 安装的软件包,如上面所示的 Rapidjson。
问题: 如何从 vcpkg 和自安装目录中找到软件包?
我在 vcpkg 安装的软件包之前和自安装的软件包之后设置了 CMAKE_TOOLCHAIN_FILE。
cmake_minimum_required(VERSION 3.24)
set(PROJECT_NAME vcpkg_and_singlelib)
project(${PROJECT_NAME})
set(CMAKE_CXX_STANDARD 17)
add_executable(${PROJECT_NAME} main.cpp)
set(BOOST_ROOT "Path/to/boost/installed/boost_1_85_0")
set(CMAKE_PREFIX_PATH "${BOOST_ROOT}")
find_package(Boost 1.85.0 REQUIRED COMPONENTS system thread date_time log log_setup program_options)
target_include_directories(${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system Boost::thread Boost::date_time Boost::log Boost::log_setup Boost::program_options)
set(CMAKE_TOOLCHAIN_FILE "/path/to/my/vcpkg/scripts/buildsystems/vcpkg.cmake")
find_package(RapidJSON CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE rapidjson)
但是还是找不到vcpkg安装的包。
变量CMAKE_PREFIX_PATH被CMake视为列表,因此它可以容纳多个路径。您的代码会覆盖该变量,因此 vcpkg 添加的任何内容都会丢失。相反,追加新路径:
list(APPEND CMAKE_PREFIX_PATH "${BOOST_ROOT}")