【问题标题】:Incorrect ar and strip when cmake cross-compiling with ccachecmake与ccache交叉编译时ar和strip不正确
【发布时间】: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

详情请见

https://launchpad.net/~likemartinma/+archive/devel

【问题讨论】:

  • 您能否解释一下您是如何在这些文件中修复的?补丁会很有帮助。 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


【解决方案1】:

尝试设置CMAKE_AR 设置ar,CMAKE_STRIP 设置CMAKE_TOOLCHAIN_FILE 中的strip。

我在我的一个项目中使用CMAKE_AR 来设置正确的ar,因为平台有多个来自不同供应商的ar

【讨论】:

  • 谢谢。几天前我找到了根本原因。我认为这是 cmake 的一个错误,它不能正确处理 ccache。我在 Modules/CMakeDetermineCCompiler.cmake 和 Modules/CMakeDetermineCXXCompiler.cmake 中修复了它。另请参阅我的 Ubuntu ppa:launchpad.net/~likemartinma/+archive/devel
  • 你是怎么解决这个问题的?它应该在Modules/CMakeFindBinUtils.cmake 中搜索这些工具
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 2016-10-28
相关资源
最近更新 更多