web-dev-qa-db-ja.com

CMakeで-Iの代わりに-isystemを使用する

CMakeで、include_directoriesを介して指定されたパス(または別の関数を介して)に、gccでビルドするときに-Iフラグの代わりに-isystemフラグを使用するように強制する方法はありますか?

-Iおよび-isystemの詳細については、 http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options を参照してください。

50
JRM

はい、オプションの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

60
RobertJMaynard

すでに述べたように、システムパスを含める正しい方法は次のとおりです。

_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でこれを修正しました

10
ideasman42