【问题标题】:Unable to cross compile with cmake 2.8无法与 cmake 2.8 交叉编译
【发布时间】:2018-04-04 21:58:15
【问题描述】:

我有以下构建结构:

/blah/3rdparty/yang
/blah/3rdparty/Makefile
/blah/3rdparty/toolchain.cmake
/blah/3rdparty/yang/libyang-0.14.78

我有这个模型 Makefile 我正在尝试调用底层 cmake

all: prep

prep:
        cd libyang-0.14.78 ; \
        cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake \
        -DENABLE_BUILD_TESTS=OFF \
        -DENABLE_VALGRIND_TESTS=OFF \
        -DPCRE_LIBRARY=/blah/lib/lipcre.so \
        -DPCRE_INCLUDE_DIR=/blah/include \
        -DCMAKE_BUILD_TYPE:String="Release"

但是,无论我做什么,cmake 都不会获取 toolchain.cmake 中的设置,我正在传递给它。

toolchain.cmake:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_C_COMPILER arm-openwrt-linux-gcc)
SET(CMAKE_CXX_COMPILER arm-openwrt-linux-gcc)
SET(host arm-linux)
SET(SYSROOT /blah/tools/armv7-openwrt-linux-gnu-uClibc-0.9.33.2)
SET(CMAKE_SYSROOT ${SYSROOT})
SET(CMAKE_FIND_ROOT_PATH ${SYSROOT})
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

当我检查它正在使用哪些可执行文件时,我看到的只是主机可执行文件,而不是来自我的工具链......这是当我使用 -LAH 选项时 cmake 打印出来的......

// Path to a program.
CMAKE_AR:FILEPATH=/usr/bin/ar
// C compiler.
CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc
// Path to a program.
CMAKE_LINKER:FILEPATH=/usr/bin/ld

CMake 版本为2.8.12.2,无法升级。

问题:

  • 如果我绝对需要这种方式,从Makefile 调用cmake 的正确方法是什么?
  • 我是否正确调用了prepCMAKE_TOOLCHAIN_FILE 或其他设置似乎从未延续。
  • 我的toolchain.cmake 正确吗?

【问题讨论】:

  • 您在调用cmake 之前是否尝试过清除构建目录?如果你之前在这个目录下构建过没有toolchain的项目,那么CMake在接下来的调用中可能会忽略toolchain参数。
  • 是的。在过去的两天里,我一直在尝试各种方法,但没有成功。我想也许 CMake 2.8 忽略了该文件,但在网上阅读表明它应该通过 CMAKE_TOOLCHAIN_FILE... 但日志中的所有内容都显示没有使用我在 toolchain.cmake 文件中要求的编译器。所以我迷路了......
  • 您是否在Makefile 之外尝试过这些步骤?你给cmake 一个目录参数,对吗?

标签: makefile cmake arm cross-compiling


【解决方案1】:

我最终放弃了使用CMAKE_TOOLCHAIN_FILE,结果你可以将所有内容直接传递给它。这是我的Makefile调用cmake的最终结果:

configure:
        cd libyang-0.14.78; \
rm -rf build; mkdir -p build; cd build; \
cmake \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DCMAKE_C_COMPILER=arm-openwrt-linux-gcc \
-DCMAKE_INSTALL_PREFIX:PATH=$(MY_TOOLCHAIN) \
-DCMAKE_FIND_ROOT_PATH=$(MY_TOOLCHAIN) \
-DPCRE_LIBRARY=$(MY_TOOLCHAIN)/lib/libpcre.so \
-DPCRE_INCLUDE_DIR=$(MY_TOOLCHAIN)/include \
-DENABLE_BUILD_TESTS=OFF \
-DENABLE_VALGRIND_TESTS=OFF \
-DCMAKE_BUILD_TYPE:String="Release" .. > config.log;

我不确定cmake 2.8.12 是否不支持CMAKE_TOOLCHAIN_FILE 或什么不支持,但既然它有效,我不再关心了。 :P

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 2017-05-08
    • 2016-12-28
    • 2015-08-04
    • 2021-05-03
    相关资源
    最近更新 更多