CMake, Qt, gcc и предварительно скомпилированные заголовки - PullRequest
2 голосов
/ 02 октября 2010

Я (еще раз) борюсь с созданием предварительно скомпилированных заголовков вместе с gcc и Qt на платформе Apple.

При создании предварительно скомпилированного заголовка я использую раздел кода (основанный на старых добрых«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 генерирует при использовании встроенных правил компилятора: -DQT_DEBUG и когдакомпилируя сгенерированный предварительно скомпилированный заголовок, я получаю сообщения об ошибках следующим образом: file.h: не используется, поскольку определено QT_DEBUG.

Мне понадобится ваша помощь по следующим вопросам:

  1. Является ли вышеуказанный способ получения флагов компилятора правильным?
  2. Есть ли лучший, более простой и простой способ сделать это?
  3. Почему -DQT_DEBUG не отображается в COMPILE_DEFINITIONS или COMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}

1 Ответ

1 голос
/ 02 октября 2010

Если вы используете 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")

Я пытаюсь использовать предварительно скомпилированные заголовки с raw gcc на linux через CMake, но я до сих пор не понял этого. Похоже, это работает, но я не вижу каких-либо улучшений скорости.

Edit: Наконец-то мне удалось использовать pch в gcc с макросом, который вы можете найти здесь:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...