Cmake交叉编译标志 [英] Cmake cross compile flags

查看:951
本文介绍了Cmake交叉编译标志的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  include(CMakeForceCompiler)
set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSORarmv7-a)
set(CMAKE_CXX_FLAGS$ {CMAKE_CXX_FLAGS} -fPIC -Wno-psabi - (CMAKE_C_FLAGS$ {CMAKE_C_FLAGS} -fPIC -Wno-psabi -fexceptions)
set(CMAKE_C_COMPILER / home / stranger / linaro / android-toolchain-eabi / bin / arm) -linux-androideabi-gcc)
set(CMAKE_CXX_COMPILER / home / stranger / linaro / android-toolchain-eabi / bin / arm-linux-androideabi-g ++)
CMAKE_FORCE_C_COMPILER($ {CMAKE_C_COMPILER}GNU )
CMAKE_FORCE_CXX_COMPILER($ {CMAKE_CXX_COMPILER}GNU)
set(CMAKE_FIND_ROOT_PATH home / stranger / linaro / android-toolchain -eabi / arm-linux-androideabi)
include_directories(SYSTEM / home /陌生人/ android-ndk-r8 / platforms / android-14 / arch-arm / usr / include)
include_directories(SYSTEM / home / stranger / android-nd k-r8 / sources / cxx-stl / gnu-libstdc ++ / include)
include_directories(SYSTEM / home / stranger / android-ndk-r8 / sources / cxx-stl / gnu-libstdc ++ / libs / armeabi-v7a /包括)

我运行cmake:

  cmake -DBUILD_ANDROID = On -DCMAKE_TOOLCHAIN_FILE =<此toolchain.cmake的路径> -DCMAKE_BUILD_TYPE =发布<我的cmake项目的路径> 

但是在编译时,我有关于异常的错误,而不是工具链文件中定义的编译器标志: / p>

 错误:禁用异常处理,使用-fexceptions启用

据我了解我的CMAKE_C_FLAGS_RELEASE,CMAKE_CXX_FLAGS_RELEASE没有任何影响。为什么?

解决方案

问题解决了,我的错误。我使用 set(CMAKE_CXX_FLAGS< flags>) set(CMAKE_CXX_FLAGS$ {CMAKE_CXX_FLAGS}< flags>在主项目中,我很困惑,因为这个CMakeLists.txt适用于android-cmake和Google-NDK(而不是所有android-cmake工具链标志都被拒绝)。

I writing toolchain.cmake file for Linaro toolchain.

include(CMakeForceCompiler)
set(CMAKE_CROSSCOMPILING   TRUE)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR "armv7-a")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wno-psabi -frtti -fexceptions" )
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wno-psabi -fexceptions" )
set(CMAKE_C_COMPILER /home/stranger/linaro/android-toolchain-eabi/bin/arm-linux-androideabi-gcc)
set(CMAKE_CXX_COMPILER /home/stranger/linaro/android-toolchain-eabi/bin/arm-linux-androideabi-g++)
CMAKE_FORCE_C_COMPILER("${CMAKE_C_COMPILER}" GNU)
CMAKE_FORCE_CXX_COMPILER("${CMAKE_CXX_COMPILER}" GNU)
set(CMAKE_FIND_ROOT_PATH  home/stranger/linaro/android-toolchain-eabi/arm-linux-androideabi)
include_directories( SYSTEM /home/stranger/android-ndk-r8/platforms/android-14/arch-arm/usr/include)
include_directories( SYSTEM /home/stranger/android-ndk-r8/sources/cxx-stl/gnu-libstdc++/include)
include_directories( SYSTEM /home/stranger/android-ndk-r8/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/include)

I run cmake:

cmake -DBUILD_ANDROID=On -DCMAKE_TOOLCHAIN_FILE=<path to this toolchain.cmake>  -DCMAKE_BUILD_TYPE=Release <path to my cmake project>

But at compile time, i had error about exceptions, instead of defined compiler flags in toolchain file:

error: exception handling disabled, use -fexceptions to enable

As far as I can understand my CMAKE_C_FLAGS_RELEASE, CMAKE_CXX_FLAGS_RELEASE has no effect. Why?

解决方案

Problem solved, my mistake. I use set(CMAKE_CXX_FLAGS "<flags>") against set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}<flags>" in main project. I was confused, because this CMakeLists.txt works correctly for android-cmake and Google-NDK (instead of all android-cmake toolchain flags was rejected).

这篇关于Cmake交叉编译标志的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆