Я (еще раз) борюсь с созданием предварительно скомпилированных заголовков вместе с 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
.
Мне понадобится ваша помощь по следующим вопросам:
- Является ли вышеуказанный способ получения флагов компилятора правильным?
- Есть ли лучший, более простой и простой способ сделать это?
- Почему
-DQT_DEBUG
не отображается в COMPILE_DEFINITIONS
или COMPILE_DEFINITIONS_${CMAKE_BUILD_TYPE}