如何在交叉编译时选择特定库(使用vcpkg和cmake)

muk1a3rh  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(190)

我使用vcpkg和cmake来做一些跨平台的开发。在WSL完成了一个示例代码后,我尝试将工具链更改为arm-linux-gnueabihf,然后如下所示。

[cmake]   Could not find a configuration file for package "plog" that is compatible
[cmake]   with requested version "".
[cmake] 
[cmake]   The following configuration files were considered but not accepted:
[cmake] 
[cmake]     /home/fuxiaoer/vcpkg/installed/x64-linux/share/plog/plogConfig.cmake, version: 1.1.9 (64bit)
[cmake] 
[cmake] Call Stack (most recent call first):
[cmake]   CMakeLists.txt:11 (find_package)
[cmake]

字符串
其中plog是我在这个项目中尝试使用的一个库。
然后我删除plog:x64-linux.rebuild my project.it显示:

Could not find a package configuration file provided by "plog" with any of
[cmake]   the following names:
[cmake] 
[cmake]     plogConfig.cmake
[cmake]     plog-config.cmake


我尝试在[vcpkgroot]/triplets/arm-linux-gnueabihf.cmake为vcpkg编写一个arm-linux-gnueabihf. cmake文件。

set(VCPKG_TARGET_ARCHITECTURE arm)
set(VCPKG_CMAKE_SYSTEM_NAME Linux)
set(VCPKG_CMAKE_SYSTEM_PROCESSOR arm)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE dynamic)


然后使用vcpkg install plog:arm-linux-gnueabihf安装一个新的库,该库使用arm-linux-gnueabihf构建,并且它工作正常。其中/vcpkg/installed显示3个文件夹

arm-linux-gnueabihf  vcpkg  x64-linux


当转到我的cmake项目时,它显示了与我提到的before.it相同的消息,似乎cmake没有更改其搜索路径,仍然使用默认路径x64-linux来查找
我在我的cmakelists.txt中添加了一个新行来告诉cmake plog在哪里。

set(plog_DIR "/home/fuxiaoer/vcpkg/installed/arm-linux-gnueabihf/share/plog")


那么这个项目终于可以成功地建立了。这意味着我使用的方法奏效了。
我的CMakeLists.txt如下所示。

cmake_minimum_required(VERSION 3.0.0)

project(cmake_with_ninja_and_vcpkg VERSION 0.1.0 LANGUAGES C CXX)

include(CTest)
enable_testing()

# set(plog_DIR "/home/fuxiaoer/vcpkg/installed/arm-linux-gnueabihf/share/plog")

find_package(Eigen3 CONFIG REQUIRED)
find_package(plog CONFIG REQUIRED)

add_executable(cmake_with_ninja_and_vcpkg main.cpp)

target_link_libraries(cmake_with_ninja_and_vcpkg PRIVATE Eigen3::Eigen)
target_link_libraries(cmake_with_ninja_and_vcpkg PRIVATE plog::plog)

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

d7v8vwbk

d7v8vwbk1#

我尝试将我的工具链改为arm-linux-gnueabihf
更改工具链只需要一个干净的重新配置(意味着使用一个新的文件夹或删除CMakeCache.txt)。如果不这样做,就不能更改vcpkg三元组。
看起来cmake没有改变它的搜索路径,仍然使用默认路径x64-linux来查找
如果您试图切换到一个已经配置好的项目,或者忘记将VCPKG_TARGET_TRIPLET设置为您实际想要使用的三元组,就会发生这种情况。您可能还需要设置VCPKG_HOST_TRIPLET。不要忘记,这需要在project()之前定义

相关问题