我正在使用CMake和工具链文件交叉编译C库。我的工具链文件将CMAKE_SYSROOT
设置为适当的值,因此编译没有问题。但是,在安装时,该库不会安装到CMAKE_SYSROOT
指向的目录中。我可以通过运行make install DESTDIR=xxx
来达到这种效果。
我了解这里有两个单独的概念:
CMAKE_SYSROOT
是目标体系结构文件系统的根目录,包含标头文件和库,并传递给例如gcc通过--sysroot
标志。我有两个问题:
将交叉编译工具链所在的sysroot与将安装所有交叉编译库的sysroot合并是一个好主意吗?在我看来,它应该是相同的,但并不确定,对于CMake来说,它们是不同的概念。在以下评论中更新: 回答,这些确实是不同的概念。
如上所述的交叉编译时,现代的CMake指定安装目录的方式是什么? 更新:我认为这应该与CMAKE_SYSROOT
相同,并且我认为CMake应该提供一种仅在某处定义一次的方法。
谢谢!
答案 0 :(得分:0)
sysroot和安装目录(前缀)之间没有干扰。
Sysroot由CMAKE_SYSROOT
变量给出,表示在构建过程中使用的工具的前缀。
安装目录(前缀)由CMAKE_INSTALL_PREFIX
变量给出,表示安装时将在其中使用项目的路径。例如。带有安装前缀/usr/local
的项目可执行文件foo
预计将以/usr/local/bin/foo
的身份运行。
请注意,通过默认安装过程,CMake将文件安装到主机计算机上。要将文件安装到目标计算机上,需要调整此过程。 DESTDIR=xxx
的参数make install
是将文件直接安装到目标计算机的一种方法。另一种方法是在主机上创建一个程序包(例如,使用CPack),然后将该程序包安装在 target 计算机上。
请注意,在上一段中,交叉编译是否已发生无关紧要:可以在一台机器上构建项目并安装到另一个,但类似的一个,没有任何交叉编译。