[解決済み】CMakeファイルにリンカやコンパイルフラグを追加する方法は?
2022-04-16 13:44:13
質問
を使用しています。
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")
やはりエラーが表示されます。
どうすればいいですか?
注:この回答が書かれた後の CMake の進化を考えると、ここにある提案のほとんどは、今では時代遅れ/非推奨で、より良い代替案があります。
これらのフラグを追加したいとします(定数で宣言するのがよいでしょう)。
SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")
SET(GCC_COVERAGE_LINK_FLAGS "-lgcov")
追加する方法はいくつかあります。
-
最も簡単なもの(クリーンではないが、簡単で便利で、コンパイルフラグ、C &; C++にのみ一度に動作する)。
add_definitions(${GCC_COVERAGE_COMPILE_FLAGS})
-
対応するCMake変数に追加する。
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")
-
ターゲットプロパティの使用、参照:doc CMake コンパイルフラグのターゲットプロパティ で、ターゲット名を知る必要があります。
get_target_property(TEMP ${THE_TARGET} COMPILE_FLAGS) if(TEMP STREQUAL "TEMP-NOTFOUND") SET(TEMP "") # Set to empty string else() SET(TEMP "${TEMP} ") # A space to cleanly separate from existing content endif() # Append our values SET(TEMP "${TEMP}${GCC_COVERAGE_COMPILE_FLAGS}" ) set_target_properties(${THE_TARGET} PROPERTIES COMPILE_FLAGS ${TEMP} )
今は2の方法を使っています。
関連
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] MakefileとCMakeを使ったコンパイルの違いについて
-
[解決済み】CMakeでインクルードディレクトリを正しく追加する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] CMakeで警告レベルを設定するには?