263

arm-linux-androideabi-g++コンパイラを使用しています。単純な「Hello、World!」をコンパイルしようとすると プログラムは正常にコンパイルされます。そのコードに単純な例外処理を追加してテストすると、それも機能します(..を追加した後-fexceptions、デフォルトで無効になっていると思います)。

これはAndroidデバイス用であり、CMakeのみを使用したいのですがndk-build

例えば ​​-first.cpp

#include <iostream>

using namespace std;

int main()
{
   try
   {
   }
   catch (...)
   {
   }
   return 0;
}

./arm-linux-androideadi-g++ -o first-test first.cpp -fexceptions

問題なく動作します...

問題...私はCMakeファイルでファイルをコンパイルしようとしています。

-fexceptionsをフラグとして追加したい。で試してみました

set (CMAKE_EXE_LINKER_FLAGS -fexceptions ) or set (CMAKE_EXE_LINKER_FLAGS "fexceptions" )

set ( CMAKE_C_FLAGS "fexceptions")

それでもエラーが表示されます。

4

6 に答える 6

216

CMake の新しいバージョンでは、単一のターゲットに対してコンパイラ フラグとリンカー フラグをそれぞれ および で設定できますtarget_compile_options(target_link_librariesはい、後者はリンカー オプションも設定します)。

target_compile_options(first-test PRIVATE -fexceptions)

この方法の利点は、 および を介して、このオプションに依存する他のターゲットへのオプションの伝搬を制御できることPUBLICですPRIVATE

CMake 3.13 以降target_link_optionsでは、意図をより明確にするリンカー オプションを追加するために使用することもできます。

于 2015-02-27T20:07:24.550 に答える
53

CMAKE_CXX_FLAGS代わりに変数を設定してみてくださいCMAKE_C_FLAGS

set (CMAKE_CXX_FLAGS "-fexceptions")

変数CMAKE_C_FLAGSは C コンパイラにのみ影響しますが、C++ コードをコンパイルしています。

にフラグを追加するのCMAKE_EXE_LINKER_FLAGSは冗長です。

于 2012-08-02T19:27:56.100 に答える