Как вы можете принудительно перекомпилировать один файл в Makefile? - PullRequest
5 голосов
/ 22 июля 2010

Идея состоит в том, что у проекта есть один файл с __DATE__ и __TIME__.Было бы здорово, если бы его перекомпилировали без явного изменения даты его модификации.

edit: $ (shell touch -c ..) может быть хорошим решением, если только неуклюже.

Ответы [ 3 ]

8 голосов
/ 22 июля 2010

Стандартная идиома состоит в том, чтобы объектный файл (а не исходный файл!) Зависел от цели, которая не существует и не имеет правил или зависимостей (эта цель обычно называется FORCE), как это

always-recompile.o: FORCE
FORCE:

Это сломается, если файл с именем «FORCE» каким-то образом будет создан.С GNU make вы можете вместо этого использовать специальную цель .PHONY, которая не имеет этого ограничения, но требует наличия явного правила для восстановления этого файла:

always-recompile.o:
        $(CC) $(CFLAGS) -c -o always-recompile.o always-recompile.c

.PHONY: always-recompile.o

См. http://www.gnu.org/software/make/manual/html_node/Phony-Targets.html для более подробной информации.

1 голос
/ 22 июля 2010

Один из способов сделать это - удалить соответствующий объектный файл (.o или .obj) перед запуском make. Это вызовет перекомпиляцию (и перекомпоновку) без изменения даты изменения исходного файла.

0 голосов
/ 19 марта 2019
sirius:/exemples/sdl2/cours # make SDL2_etape1
make: 'SDL2_etape1' is up to date.
sirius:/exemples/sdl2/cours # ls -lah
total 96K
drwxr-xr-x 1 root root  316 Mar 19 20:46 .
drwxr-xr-x 1 root root   34 Apr  6  2016 ..
-rw-r--r-- 1 root root 2.5K Mar 19 20:45 SDL2_etape1.c
-rwxr-xr-x 1 root root  17K Mar 19 20:45 SDL2_etape2
-rw-r--r-- 1 root root 3.1K Mar 19 20:45 SDL2_etape2.c
-rw-r--r-- 1 root root 4.3K Mar 19 20:45 SDL2_etape3.c
-rw-r--r-- 1 root root 5.2K Mar 19 20:45 SDL2_etape4.c
-rw-r--r-- 1 root root 5.7K Mar 19 20:45 SDL2_etape5.c
-rw-r--r-- 1 root root 7.4K Mar 19 20:45 SDL2_etape6.c
-rw-r--r-- 1 root root  18K Mar 19 20:45 exemple_type_fonction.c
drwxr-xr-x 1 root root   42 Apr 30  2016 images
-rw-r--r-- 1 root root 5.3K Mar 19 20:45 ldf_SDL2addshadedtext.c
-rw-r--r-- 1 root root  127 Mar 19 20:46 makefile
-rw-r--r-- 1 root root  137 Mar 19 20:33 makefile~

Не может понять, что происходит, make никогда не скомпилирует SDL2_etape1.c при вызове, как указано выше ...

Я пробовал коснуться, сделать -B, сделать - всегда-make,Я изменил исходный код, make-файл, ни в коем случае ...

Это содержимое make-файла

sirius:/exemples/sdl2/cours # more makefile
CFLAGS=`pkg-config SDL2_ttf SDL2_image --cflags`
LDFLAGS=`pkg-config SDL2_ttf SDL2_image --libs`

SDL2_etape1: SDL2_etape1.c

Я заметил, используя полный оболочку (клавиша табуляции), которая "делает SDL2_etape2"работал ... как и все остальные файлы в этой папке ...

sirius:/exemples/sdl2/cours # make SDL2_etape3
cc `pkg-config SDL2_ttf SDL2_image --cflags`  `pkg-config SDL2_ttf SDL2_image --libs`  SDL2_etape3.c   -o SDL2_etape3
...