CMake 在寻找 lib 文件时没有使用正确的路径
CMake is not using correct paths when looking for lib files
我最近在我的 windows 系统上安装了 vcpkg 并为 vscode 安装了 cmake(和 cmake 工具)扩展,因为我想为我的 c++ 项目使用一个 json 文件。我将 vcpkg 放在一个随机位置只是为了弄乱它并了解它是如何工作的。然而,当我将它移动到另一个位置作为它的最终位置时,CMake 感到困惑并且找不到 jsoncpp.
的 lib 文件
这是错误:
Unable to open 'json_value.cpp': Unable to read file 'c:\path\to\old\location\vcpkg\buildtrees\jsoncpp\src18c327b1-034a82149a.clean\src\lib_json\json_value.cpp' (Error: Unable to resolve non-existing file 'c:\path\to\old\location\vcpkg\buildtrees\jsoncpp\src18c327b1-034a82149a.clean\src\lib_json\json_value.cpp').
我已将 vcpkg 从 C:\path\to\old\location\vcpkg
移动到 C:\vcpkg
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.0.0)
project(myProgram VERSION 0.1.0)
include(CTest)
enable_testing()
add_executable(myProgram main.cpp)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
set(CMAKE_BUILD_TYPE debug)
# set_target_properties(${PROJECT_NAME}
# PROPERTIES
# RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR})
include(CPack)
include_directories(C:/vcpkg/installed/x64-windows/include)
link_directories(C:/vcpkg/installed/x64-windows/lib)
find_package(jsoncpp CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE jsoncpp_lib jsoncpp_object)
我已经尝试在 settings.json 中更新 CMAKE_TOOLCHAIN_FILE 属性,删除 cmake 的缓存,重置扩展,并重新安装 jsoncpp、vcpkg 和 cmake 扩展新鲜(我已经确定他们的文件已被删除)。
只好把找包功能拿出来了。查找包功能使 cmake 期望源代码位于 buildtrees 文件夹中,在这种情况下不是(我认为它在某个时候,但我不知道为什么它不会回来)。只需使用 target_link_libraries(${PROJECT_NAME} jsoncpp)
以及 include/link 目录语句即可为 cmake 提供包含该库所需的一切。但是,我仍然不明白的一件事是,为什么 cmake 在旧位置寻找那部分源代码。
我最近在我的 windows 系统上安装了 vcpkg 并为 vscode 安装了 cmake(和 cmake 工具)扩展,因为我想为我的 c++ 项目使用一个 json 文件。我将 vcpkg 放在一个随机位置只是为了弄乱它并了解它是如何工作的。然而,当我将它移动到另一个位置作为它的最终位置时,CMake 感到困惑并且找不到 jsoncpp.
的 lib 文件这是错误:
Unable to open 'json_value.cpp': Unable to read file 'c:\path\to\old\location\vcpkg\buildtrees\jsoncpp\src18c327b1-034a82149a.clean\src\lib_json\json_value.cpp' (Error: Unable to resolve non-existing file 'c:\path\to\old\location\vcpkg\buildtrees\jsoncpp\src18c327b1-034a82149a.clean\src\lib_json\json_value.cpp').
我已将 vcpkg 从 C:\path\to\old\location\vcpkg
移动到 C:\vcpkg
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.0.0)
project(myProgram VERSION 0.1.0)
include(CTest)
enable_testing()
add_executable(myProgram main.cpp)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
set(CMAKE_BUILD_TYPE debug)
# set_target_properties(${PROJECT_NAME}
# PROPERTIES
# RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR})
include(CPack)
include_directories(C:/vcpkg/installed/x64-windows/include)
link_directories(C:/vcpkg/installed/x64-windows/lib)
find_package(jsoncpp CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE jsoncpp_lib jsoncpp_object)
我已经尝试在 settings.json 中更新 CMAKE_TOOLCHAIN_FILE 属性,删除 cmake 的缓存,重置扩展,并重新安装 jsoncpp、vcpkg 和 cmake 扩展新鲜(我已经确定他们的文件已被删除)。
只好把找包功能拿出来了。查找包功能使 cmake 期望源代码位于 buildtrees 文件夹中,在这种情况下不是(我认为它在某个时候,但我不知道为什么它不会回来)。只需使用 target_link_libraries(${PROJECT_NAME} jsoncpp)
以及 include/link 目录语句即可为 cmake 提供包含该库所需的一切。但是,我仍然不明白的一件事是,为什么 cmake 在旧位置寻找那部分源代码。