2

私は(もう一度)AppleプラットフォームでgccとQtと組み合わせてプリコンパイル済みヘッダーを作成するのに苦労しています。

プリコンパイル済みヘッダーを作成するときは、コードセクション(古き良き「PCHSupport_26.cmake」に基づく)を使用して、次のようにコンパイルフラグを抽出します。

STRING(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" _flags_var_name)
SET(_args ${CMAKE_CXX_FLAGS} ${${_flags_var_name}})
GET_DIRECTORY_PROPERTY(DIRINC INCLUDE_DIRECTORIES )
FOREACH(_item ${DIRINC})
   LIST(APPEND _args "-I${_item}")
ENDFOREACH(_item)
GET_DIRECTORY_PROPERTY(_defines_global COMPILE_DEFINITIONS)
LIST(APPEND defines ${_defines_global})
STRING(TOUPPER "COMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}" _defines_for_build_name) GET_DIRECTORY_PROPERTY(defines_build ${_defines_for_build_name})
LIST(APPEND _defines ${_defines_build})
FOREACH(_item ${_defines})
   LIST(APPEND _args "-D${_item}")
ENDFOREACH(_item ${_defines})
LIST(APPEND _args -c ${CMAKE_CURRENT_SOURCE_DIR}/${PRECOMPILED_HEADER} -o ${_gch_filename})
SEPARATE_ARGUMENTS(_args)

残念ながら、上記のコンパイラフラグは、組み込みのコンパイラルールを使用するときにCMakeが生成する2つの重要なパラメータを見逃します。 -DQT_DEBUG 生成されたプリコンパイル済みヘッダーを使用してコンパイルすると、次のようなエラーが発生します。file.h:QT_DEBUGが定義されているため使用されません。

私は次のことであなたの助けが必要です:

  1. コンパイラフラグを取得する上記の方法は正しいですか?
  2. これを行うためのより良い、より簡単な、より簡単な方法はありますか?
  3. または-DQT_DEBUGに表示されないのはなぜですかCOMPILE_DEFINITIONSCOMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}
4

1 に答える 1

1

XCode を単純に使用している場合:

    SET_TARGET_PROPERTIES(${target} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
    SET_TARGET_PROPERTIES(${target} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${target}/std.h")

LinuxでCMakeを介して生のgccでプリコンパイル済みヘッダーを使用しようとしていますが、まだ理解していません。動作しているように見えますが、速度の改善は見られません。

編集:ここで見つけることができるマクロを使用して、最終的に gcc で pch を使用することができました: http://www.mail-archive.com/cmake@cmake.org/msg04394.html

于 2010-10-02T13:51:49.447 に答える