У меня есть установка, в которой на этапе генерации CMake настраивает файл заголовка с определениями, необходимыми для моего проекта C. Затем, вместо добавления настроенного файла в качестве включения в каждый исходный файл, я добавил его в команду компиляции, установив "-include global_config.h" в переменную CMAKE_C_FLAGS
. По какой-то причине зависимости, сгенерированные компилятором, не включают зависимости, добавленные в командной строке.
Это работает нормально для чистых сборок, но как только я изменяю переменную кеша CMake и перестраиваю, происходит следующее: Сам CMake перезапускается, конфигурация генерируется заново, но, поскольку изменился только файл конфигурации, и это не считается зависимостью для исходных файлов, они не перекомпилируются. Мне нужен способ явно указать, что сгенерированный файл является «частью» команды компиляции.
Пример минимальной воспроизводимости:
cmake_minimum_required(VERSION 3.9.1)
project(Cfg_test)
set(USER_NAME spidey CACHE STRING "User name to be greeted")
configure_file(global_cfg.h.in global_cfg.h)
set(CMAKE_C_FLAGS "-include global_cfg.h")
add_executable(greeter main.c)
- настраиваемый заголовок, global_cfg.h.in:
#define USER_NAME "@USER_NAME@"
#include <stdio.h>
int main(void)
{
printf("Hello, %s.\n", USER_NAME);
return 0;
}