我在linux下交叉编译cmake时遇到问题。
cmake生成了一个带有-isystem /usr...子句的makefile,而/usr是宿主系统,所以它选择了所有错误的定义。特别烦人的是,cmake知道它是错误的,因为编译命令会发出大量的错误/警告,比如...
aarch 64-Linux-C++语言:警告:交叉编译中使用了不安全的头文件/库路径:'-isystem "/usr/本地/包含'
现在,我不是cmake方面的Maven,但我知道我必须在工具链文件中指定一个查找路径,类似于...
set(CMAKE_SYSTEM_NAME Linux)
set(BR_PATH "/home/mike/work/v3")
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_CROSSCOMPILING 1)
# which compilers to use for C and C++
set(CMAKE_C_COMPILER ${BR_PATH}/output/host/bin/aarch64-buildroot-linux-gnu-gcc.br_real)
set(CMAKE_CXX_COMPILER ${BR_PATH}/output/host/bin/aarch64-linux-c++)
set(CMAKE_FIND_ROOT_PATH "${BR_PATH}/output/host/lib; ${BR_PATH}/output/host/aarch64-buildroot-linux-gnu/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)
现在,它很清楚地选择了这个工具链文件,因为它使用了正确的编译器。我不明白为什么它忽略了我的CMAKE_FIND_ROOT_PATH。
我尝试通过设置(CMAKE_IGNORE_PATH /usr)来强制它执行,但它仍然在生成的makefile中包含“-isystem /usr/include”。
我做错了什么?
1条答案
按热度按时间hgncfbus1#
您忘了在工具链文件中设置
CMAKE_SYSROOT
。这可能会起作用:请参见以下站点中有关交叉编译到Linux系统的文档:https://cmake.org/cmake/help/latest/manual/cmake-toolchains.7.html#cross-compiling-for-linux