由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Linux版 - 在Makefile的文件关联中,头文件依赖另一个头文件怎么办?
相关主题
linux下有什么类似 visual c++一样的软件吗vim和emacs的区别
LINUX下的ECLIPSE反应很迟钝。不好用。有同感么大家一般visual studio C++ 下编译通过的程序放到linux下编译需要做什么改动?
Loving Qt恨透了以linux为首的open source
Makefile中怎么处理没有扩展名的文件?请推荐linux下好用的IDE
Makefile link lib questionKDevelop 4.0 released, C++ IDE
你们谁写过长一点儿的python?请推荐编程环境
如何把Linux平台下C++源代码转换到 windows平台下编译?有人用过magic C++没有?
问个kernel module的编译问题C++ and eclipse
相关话题的讨论汇总
话题: 文件话题: makefile话题: 关联话题: cppflags话题: source
进入Linux版参与讨论
1 (共1页)
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

1 (共1页)
进入Linux版参与讨论
相关主题
C++ and eclipseMakefile link lib question
大吼一声你们谁写过长一点儿的python?
请问 C C++ 编译器 (转载)如何把Linux平台下C++源代码转换到 windows平台下编译?
求推荐 linux问个kernel module的编译问题
linux下有什么类似 visual c++一样的软件吗vim和emacs的区别
LINUX下的ECLIPSE反应很迟钝。不好用。有同感么大家一般visual studio C++ 下编译通过的程序放到linux下编译需要做什么改动?
Loving Qt恨透了以linux为首的open source
Makefile中怎么处理没有扩展名的文件?请推荐linux下好用的IDE
相关话题的讨论汇总
话题: 文件话题: makefile话题: 关联话题: cppflags话题: source