Страница 1 из 1

Precompiled Headers

Добавлено: Вт, 27 сентября 2016, 12:28:17
dyvniy
In Linux
http://www.linux.org.ru/forum/development/7472411
Спойлер
gcc + cmake и precompiled headers перегенерация *.gch после изменения *.h


0

4
Доброго времени суток!

Возникает следующая проблема - использую cmake, подключил precompiled headers. Но вот беда, если меняется какой нибудь заголовочный файл, перегенерация *.gch не происходит:

т.е. есть след код:

// stdafx.h
#include "main.h"
#include "test.h"
#include 100500 других заголовочных файлов
CMakeLists.txt
cmake_minimum_required (VERSION 2.6)

project(test)

include_directories(
${CMAKE_CURRENT_BINARY_DIR}
)

set(SOURCES
main.cpp
test.cpp
)

set(HEADERS
stdafx.h
main.h
test.h
)

set(RESOURCES
)


# Создаем приложение
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS} ${RESOURCES})

#Генерируем прикомпилинг хеадер
include(PCHSupport)
if(PCHSupport_FOUND)
add_precompiled_header(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/stdafx.h)
endif(PCHSupport_FOUND)

add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND rm ARGS -rfv ${CCOPY_DST} )
add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD COMMAND ln ARGS -sv ${CCOPY_SRC} ${CCOPY_DST} )
запускаю make в бинарном каталоге - все ок - сгенерировалось, собралось, работает.
Если поменять в каталоге с исходниками my.h, то в .../stdafx.h.gch/Debug.gch - лежит старый (видно по дате, размеру, командной строке в eclipse) т.е. я ожидал что он перестроится заного.

Теперь, собственно, вопрос: Как заставить пересобирать *.gch-ки с помощью cmake, может волшебные ключи есть какие? Как вы в своих проектах решили такую проблему?

Спасибо!


art_corp ★
29.02.2012 11:38:11
Juick Share on Twitter Share on Google Plus Ссылка
← v4l2 перечисление устройств
Как выполняются sh-скрипты в sh-скрипте? →

С каких пор в CMake появилась команда add_precompiled_header? Косяк в твоей реализации, там и копай.

JackyTreehorn ★ (29.02.2012 14:01:19)
Ссылка
Ответ на: комментарий от JackyTreehorn 29.02.2012 14:01:19

да похоже модуль расширения старый был
PCHSupport.cmake - нарыл в интернете другую его версию там кода в два раза больше, как раз есть проверка на включаемые в главный заголовочный файл других хедеров, а затем их проверка.

art_corp ★ (29.02.2012 15:30:35)
Ссылка
Ответ на: да похоже модуль расширения старый был от art_corp 29.02.2012 15:30:35

И как, заработало? Я для VS свой скрипт писал.

JackyTreehorn ★ (29.02.2012 15:45:42)
Ссылка
Ответ на: комментарий от JackyTreehorn 29.02.2012 15:45:42

на все 100% сказать не могу, на тестовом проекте, работает - переношу на основной. вот если интересно ссылка на сам модуль: https://github.com/luceneplusplus/LucenePlusPlus/blob/master/cmake/PCHSupport.cmake

и еще, они похожи в одном message только разкомментированы.
http://public.kitware.com/Bug/file_download.php?file_id=901&type=bug

P.S. Вроде как, судя по коду, они универсальны для нескольких компиляторов, в том числе и студии.