cmake compile_options add_compile_options CMAKE_CXX_FLAGS 差分
cmakeスクリプトでは、コンパイルオプションの設定は
add_compile_options
コマンドで変更したり、setコマンドで変更したりできます。
CMAKE_CXX_FLAGS
または
CMAKE_C_FLAGS
.
この2つのメソッドを使用した場合の効果は、場合によっては同じになりますが、それでも異なることに注意してください。
add_compile_options
コマンドは、すべてのコンパイラ (c および c++ コンパイラを含む) のためのコンパイルオプションを追加します。
を設定するのに対し、setコマンドは
CMAKE_C_FLAGS
または
CMAKE_CXX_FLAGS
変数は、それぞれcとc++コンパイラ専用です。
例えば、次のようなコードです。
# Determine the compiler type, if it is a gcc compiler, add c++11 support to the compile options
if(CMAKE_COMPILER_IS_GNUCXX)
add_compile_options(-std=c++11)
message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)
使用方法
add_compile_options
追加
-std=c++11
オプションで c++11 対応のコンパイルができます。しかし
add_compile_options
はすべての種類のコンパイラーに固有のものであるため、cコードをコンパイルすると、次のようなWARNINGが生成されます。
J:\workspace.gcc>make b64
[ 50 % ] C オブジェクトのビルド libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cdecode.c.obj
cc1.exe: 警告: コマンドラインオプション '-std=c++11' は C++/ObjC++ では有効だが、C では無効である。
[100%] C オブジェクトのビルド libb64/CMakeFiles/b64.dir/libb64-1.2.1/src/cencode.c.obj
cc1.exe: 警告: コマンドラインオプション '-std=c++11' は C++/ObjC++ では有効だが、C では無効である。
C言語のスタティックライブラリ libb64.a をリンクする
[100%] ターゲット b64 をビルド
コンパイルには影響しませんが、見た目が悪いです。この警告をなくすためには
add_compile_options
を追加するのではなく、c++コンパイラにのみこのオプションを追加します。
そこで、以下のようにコードを変更すると、警告が消えます。
# determine the compiler type, if it is gcc compiler, then add c++11 support to the compiler options
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)
関連
-
Python update pip error: EnvironmentErrorのため、パッケージをインストールできませんでした。[WinError 5] アクセスが拒否されました
-
AndroidXへの移行-今まで遭遇したこと、これから遭遇すること、ここにあり
-
%matplotlib インライン構文エラー
-
merge into は、あるテーブルの 1 つの列から別のテーブルの列にデータをコピーします。
-
この宣言には、ストレージクラスまたはタイプ指定子がありません。この警告は何を意味するのですか?
-
Baiduマップの呼び出しでエラーが報告された Uncaught TypeError:Cannot read property 'fc' of undefined
-
ASP.NET MVCのWebApiへのAjax呼び出しで、500 Internal Server Errorが返される。
-
adb shell prompt device not foundについて
-
マイクロサービスの実践(I) OAUTH 2.0統一認証認可に基づくマイクロサービス基盤
-
springboot と spring data jpa を組み合わせると、'entityManagerFactory' という名前の bean が見つからないと表示されます。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
undefinedエラーが発生しました:getaddrinfo ENOTFOUND; GETできません。
-
VCの*.objで定義済みの問題を解決します。
-
Pythonではbreak文とcontinue文はifとしか使えないのでしょうか?
-
pipの実行エラーです。ランチャーで致命的なエラーが発生しました。Unable to create process using '"'
-
MySql エラー: java.sql.SQLException: ユーザー 'root'@'localhost' (パスワード: YES を使用) のアクセスが拒否されました。
-
Pycharm コード ドッカー コンテナ 実行 デバッグ|機械学習シリーズ
-
Eclipseオンラインインストールエラー インストールするアイテムの収集中にエラーが発生しました。
-
ant design pro テーブルソート(3回クリック可能)
-
java.sql.SQLException: 基礎となるデータベースから接続を取得できませんでした!
-
pythonパッケージクローラー関連のコードエラー('Could not find a suitable TLS CA certificate bundle, invalid path: C:³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³³)