Допустим, у меня есть компиляция кода в некоторый момент с cmake 2.8 на linux.Почему cmake компилирует все после git commit
Я изменяю файл «my_changed_file», запускаю cmake, и создается только этот файл. Все идет нормально.
Теперь я хочу, чтобы совершить это:
git add my_changed_file
git commit
Если я снова запустить CMake, я бы ожидать, ничего не происходит. Но все мои файлы перекомпилированы, несмотря на то, что я ничего не трогал! Временная метка кажется нетронутой, когда я делаю ls -l.
У меня есть такие строки:
execute_process(
COMMAND git describe --abbrev=8 --dirty --always --tags
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_CODE_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_definitions("-DCODE_VERSION=${GIT_CODE_VERSION}")
Но это влияет только на файл main.cpp
Что происходит?
благодаря
привет. Я попробовал добавить или заменить мое add_definition с помощью set_property, но, похоже, он мало что делает. Есть ли что-то другое? Может быть, он будет помещен где-нибудь? Если я не укажу COMPILE_DEFINITIONS_ $ CONFIG, то это применимо к каждой конфигурации, правильно? Спасибо – Napseis
Я обнаружил, что с исходным кодом COMPILE_DEFINITIONS не работает с генератором makefile (который вы используете). Но есть лучший подход, который использует файл заголовка configure. Я обновил свой ответ на этот случай. – Tsyvarev
Чтобы уменьшить то, что восстанавливается еще больше, вместо того, чтобы регенерировать заголовок каждый раз при изменении данных фиксации git, поместите '@ GIT_CODE_VERSION @' в файл реализации (например, 'version.cpp.in') внутри тривиальной функции и скопируйте это файл с 'configure_file'. Заголовок затем содержит только прототип функции и никогда не изменяется. Результатом будет только то, что один файл реализации необходимо перестроить, а не каждый файл, который включает 'version.h'. –