【发布时间】: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的正确方法是什么? - 我是否正确调用了
prep?CMAKE_TOOLCHAIN_FILE或其他设置似乎从未延续。 - 我的
toolchain.cmake正确吗?
【问题讨论】:
-
您在调用
cmake之前是否尝试过清除构建目录?如果你之前在这个目录下构建过没有toolchain的项目,那么CMake在接下来的调用中可能会忽略toolchain参数。 -
是的。在过去的两天里,我一直在尝试各种方法,但没有成功。我想也许 CMake 2.8 忽略了该文件,但在网上阅读表明它应该通过
CMAKE_TOOLCHAIN_FILE... 但日志中的所有内容都显示没有使用我在toolchain.cmake文件中要求的编译器。所以我迷路了...... -
您是否在
Makefile之外尝试过这些步骤?你给cmake一个目录参数,对吗?
标签: makefile cmake arm cross-compiling