【发布时间】:2013-04-02 03:35:22
【问题描述】:
我交叉编译了一个项目witch ccache:
cmake -G"Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=mips64el-toolchain.cmake
以下是mips64el-toolchain.cmake:
SET (CMAKE_SYSTEM_NAME Linux)
SET (CMAKE_SYSTEM_PROCESSOR mips64el)
SET (CMAKE_C_COMPILER ccache mips64el-n64-linux-gnu-gcc)
SET (CMAKE_CXX_COMPILER ccache mips64el-n64-linux-gnu-g++)
# here is the target environment located
SET (CMAKE_FIND_ROOT_PATH
$ENV{HOME}/x-tools/mips64el-n64-linux-gnu/mips64el-n64-linux-gnu/sysroot)
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
但我在 CMakeCache.txt 中发现了不正确的值:
CMAKE_AR:FILEPATH=/usr/bin/ar
CMAKE_STRIP:FILEPATH=/usr/bin/strip
ar 和 strip 不是交叉编译器。
如何正确设置?
一周前,我发现这是cmake的一个错误并在
中修复- 模块/CMakeDetermineCCompiler.cmake
- 模块/CMakeDetermineCXXCompiler.cmake
详情请见
【问题讨论】:
-
您能否解释一下您是如何在这些文件中修复的?补丁会很有帮助。 Yocto Linux 2.0(我们在这里使用)使用相当旧的 cmake,我无法从您的 ppa 中获取已修复的 cmake。
-
对不起,很难解释。但是你可以从launchpad.net/~likemartinma/+archive/ubuntu/devel/+files/…获得补丁
-
谢谢。无论如何,我的问题是 CMake 没有首先设置 CMAKE_CROSSCOMPILING 。我不得不将它调用为 cmake -DCMAKE_SYSTEM_NAME=Linux 以使其设置交叉编译选项。然后我所有的 ${CMAKE_STRIP} 都得到了正确的前缀。
-
你最好改用CMAKE_TOOLCHAIN_FILE。请关注vtk.org/Wiki/CMake_Cross_Compiling
-
就像,我觉得不合适。尤其是在阅读了您链接的文章之后。我不知道也不想知道工具链的确切路径。它可能会有所不同。我想要的是告诉 CMake 我确实在交叉编译。如果没有设置 CMAKE_SYSTEM_NAME,它会以某种方式忽略这个事实。
标签: cmake cross-compiling ccache