R*******y 发帖数: 19 | 1 我的makefile文件如下:
main.o : main.cpp sim.h
g++ -c main.cpp
我的main.cpp里包含sim.h,而sim.h里又包含了另一个头文件“macro.h”。如果我改
动了macro.h,makefile不会认为sim.h本身有任何改动,所以就不会更新main.o。我后
来在makefile文件中加了一句关联性:
sim.h : macro.h
结果没有变化:修改macro.h后,make时仍然认为没有任何文件被改动过。我觉得这是
因为虽然我加了sim.h对macro.h的关联性,但下面并没有执行什么语句,所以sim.h没
被update(比如修改文件更新日期什么的),因此上面的g++也就不会被触发。
我知道一个存在的替代方案是:main.o : main.cpp sim.h macro.h,但这貌似不是一
种很有效的作法,因为这意味着你在写关联时,还要找到内部的层层关联,特别地,如
果这只“关联链”有N级,这N级文件你都得写在第一级文件的关联中……
我平时一般只用Visual C++这样现成的IDE,在Linux下自己写makef |
S**G 发帖数: 180 | 2 touch sim.h
【在 R*******y 的大作中提到】 : 我的makefile文件如下: : main.o : main.cpp sim.h : g++ -c main.cpp : 我的main.cpp里包含sim.h,而sim.h里又包含了另一个头文件“macro.h”。如果我改 : 动了macro.h,makefile不会认为sim.h本身有任何改动,所以就不会更新main.o。我后 : 来在makefile文件中加了一句关联性: : sim.h : macro.h : 结果没有变化:修改macro.h后,make时仍然认为没有任何文件被改动过。我觉得这是 : 因为虽然我加了sim.h对macro.h的关联性,但下面并没有执行什么语句,所以sim.h没 : 被update(比如修改文件更新日期什么的),因此上面的g++也就不会被触发。
|
s**i 发帖数: 381 | 3 一般我改了头文件后都要make clean;make的
【在 R*******y 的大作中提到】 : 我的makefile文件如下: : main.o : main.cpp sim.h : g++ -c main.cpp : 我的main.cpp里包含sim.h,而sim.h里又包含了另一个头文件“macro.h”。如果我改 : 动了macro.h,makefile不会认为sim.h本身有任何改动,所以就不会更新main.o。我后 : 来在makefile文件中加了一句关联性: : sim.h : macro.h : 结果没有变化:修改macro.h后,make时仍然认为没有任何文件被改动过。我觉得这是 : 因为虽然我加了sim.h对macro.h的关联性,但下面并没有执行什么语句,所以sim.h没 : 被update(比如修改文件更新日期什么的),因此上面的g++也就不会被触发。
|
M********g 发帖数: 183 | 4 不知道这样做行不行。
main.o : main.cpp sim.h macro.h
g++ -c main.cpp
【在 R*******y 的大作中提到】 : 我的makefile文件如下: : main.o : main.cpp sim.h : g++ -c main.cpp : 我的main.cpp里包含sim.h,而sim.h里又包含了另一个头文件“macro.h”。如果我改 : 动了macro.h,makefile不会认为sim.h本身有任何改动,所以就不会更新main.o。我后 : 来在makefile文件中加了一句关联性: : sim.h : macro.h : 结果没有变化:修改macro.h后,make时仍然认为没有任何文件被改动过。我觉得这是 : 因为虽然我加了sim.h对macro.h的关联性,但下面并没有执行什么语句,所以sim.h没 : 被update(比如修改文件更新日期什么的),因此上面的g++也就不会被触发。
|
i**g 发帖数: 134 | 5 如果能够实现的话,make 就得读取源文件才能知道
里面包含了哪些头文件,不同的语言可能语法也不同,
我估计超出了make的范畴了
【在 R*******y 的大作中提到】 : 我的makefile文件如下: : main.o : main.cpp sim.h : g++ -c main.cpp : 我的main.cpp里包含sim.h,而sim.h里又包含了另一个头文件“macro.h”。如果我改 : 动了macro.h,makefile不会认为sim.h本身有任何改动,所以就不会更新main.o。我后 : 来在makefile文件中加了一句关联性: : sim.h : macro.h : 结果没有变化:修改macro.h后,make时仍然认为没有任何文件被改动过。我觉得这是 : 因为虽然我加了sim.h对macro.h的关联性,但下面并没有执行什么语句,所以sim.h没 : 被update(比如修改文件更新日期什么的),因此上面的g++也就不会被触发。
|
p***o 发帖数: 1252 | 6 用gcc -MM生成依赖关系,然后加到makefile里:
http://www.makelinux.net/make3/make3-CHP-2-SECT-7.html
【在 R*******y 的大作中提到】 : 我的makefile文件如下: : main.o : main.cpp sim.h : g++ -c main.cpp : 我的main.cpp里包含sim.h,而sim.h里又包含了另一个头文件“macro.h”。如果我改 : 动了macro.h,makefile不会认为sim.h本身有任何改动,所以就不会更新main.o。我后 : 来在makefile文件中加了一句关联性: : sim.h : macro.h : 结果没有变化:修改macro.h后,make时仍然认为没有任何文件被改动过。我觉得这是 : 因为虽然我加了sim.h对macro.h的关联性,但下面并没有执行什么语句,所以sim.h没 : 被update(比如修改文件更新日期什么的),因此上面的g++也就不会被触发。
|
E*V 发帖数: 17544 | 7 对。或者不要自己些makefile
要autotools。
【在 p***o 的大作中提到】 : 用gcc -MM生成依赖关系,然后加到makefile里: : http://www.makelinux.net/make3/make3-CHP-2-SECT-7.html
|
k****5 发帖数: 546 | 8 RE
CXX = gcc
CPPFLAGS = -I include
SOURCE = main.cpp
main.o: sim.h
include $(subst .c,.d,$(SOURCE))
%.d: %.c
$(CXX) -M $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\).o[ :]*,\1.o $@ : ,g' < $.$$$$ > $@ \
rm -f $@.$$$$
【在 p***o 的大作中提到】 : 用gcc -MM生成依赖关系,然后加到makefile里: : http://www.makelinux.net/make3/make3-CHP-2-SECT-7.html
|
R*******y 发帖数: 19 | 9 应该是这个方法最好。谢谢!
【在 p***o 的大作中提到】 : 用gcc -MM生成依赖关系,然后加到makefile里: : http://www.makelinux.net/make3/make3-CHP-2-SECT-7.html
|