CMakeで、include_directoriesを介して指定されたパス(または別の関数を介して)に、gccでビルドするときに-Iフラグの代わりに-isystemフラグを使用するように強制する方法はありますか?
-Iおよび-isystemの詳細については、 http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options を参照してください。
はい、オプションのSYSTEMフラグを使用して、パスをシステムインクルードに強制します
include_directories(SYSTEM path)
http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:include_directories
CMake 2.8.12以降、cmakeの新しい使用要件機能を活用しながら、新しいtarget_include_directoriesを使用してシステムディレクトリインクルードをターゲットレベルで含めることができます。
target_include_directories(foo SYSTEM PUBLIC path)
これで、ターゲットfooはシステムインクルードとしてパスを使用し、fooにリンクするものはすべて、システムインクルードと同じように自動的にパスを使用します。 PUBLICキーワードをPRIVATEまたはINTERFACEに変更することにより、これらの使用要件の伝播を制御できます。
http://cmake.org/cmake/help/v2.8.12/cmake.html#command:target_include_directories
すでに述べたように、システムパスを含める正しい方法は次のとおりです。
_include_directories(SYSTEM path1 path2)<br>
_
ただし、CMake 2.8.4とMakefilesでは、これはC++でのみ使用され、Cでは使用されませんでした。調べたところ、GNU.cmakeは初期化されませんでした:_CMAKE_INCLUDE_SYSTEM_FLAG_C
_
したがって、project()
を呼び出した直後に、これを自分で設定できます。
if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem") endif()
CMake開発者は2.8.5でこれを修正しました