交叉编译时如何处理依赖关系



将一个研究项目转移到创业公司后,我突然需要分发二进制文件,而不是源代码+构建指令。我有一个c++代码库使用CMake。

我发现自己在这里完全不知所措,以至于我似乎找不到我需要的资源来开始。更具体地说,问题是如何交叉编译源代码,以便用户可以从安装的任何地方加载依赖库(在这种情况下,动态/静态库的优缺点也值得感谢)。现在,当我构建目标时,二进制文件会自动链接到特定于我的主机环境的路径,这当然不适用于分发二进制文件。我在找:

  1. 关于如何使用CMake完成此操作的高级描述,
  2. 一些指向资源的指针,这些资源对于一个完整的交叉编译新手来说是足够容易访问的。

编辑:我意识到我实际上有两个问题而不是一个。其中一个是关于交叉编译,我满足于实际使用的机器(真实或虚拟)与不同的操作系统为每个操作系统,构建之间的消除需要保存例如Windows和Mac。另一个问题,我还是不知道如何处理,如何构建可执行在我的机器上,分发到其他机器使用相同的操作系统的可执行文件使用动态链接依赖关系将很有可能被安装在不同的路径,或者在用户的机器上使用不同的版本。我如何在我的机器上构建二进制文件,(可能在cmake的find_package或类似的帮助下)可以链接到用户在其系统上安装的依赖项,而无需共享源代码?

从我的角度来看,使用cmake导入库项目是很好的。

cmake_minimum_required(VERSION 3.0)
project(specific_library)
if(WINDOWS)
set(imported_lib ${win_lib})
elseif(LINUX)
set(imported_lib ${linux_lib})
elseif(ANDROID)
set(imported_lib ${android_lib})
endif(WINDOWS)
add_library(
${PROJECT_NAME}
STATIC
IMPORTED
GLOBAL
)

在主项目目录中,你可以这样做

add_subdirectory(specific_library)
target_link_libraries(
${PROJECT_NAME}
PUBLIC
specific_library
)

最新更新