phony编程有什么用,Linux系统里C编程关于Makefile的问题

1,Linux系统里C编程关于Makefile的问题吧名称命名为Makefile在目录下于运行 make XXXXXX为makefile中的目标CC = gccCCFLAGS =TARGET = test.phony: all cleanall : $(TARGET)test : test.c$(CC) $(CCFLAGS) $< -o $@clean:rm test.o test编译:make 或 make all清除make clean【phony编程有什么用,Linux系统里C编程关于Makefile的问题】
2 , 请教一个关于在makefile中使用PHONY的问题1. 不是 。事实上.PHONY通常会放在最后 。make会读取整个makefile文件,然后执行相关命令 。.PHONY只是一种markup 。2. 如果要规范,那一行是必须的 。(虽然即使不写,实际应用中也没有什么问题 。)PHONY的作用是告诉make这个target不是真正的文件,只是一个虚拟的target 。如果你的目录下恰好有一个名字为all的文件 。加上那一行和不加那一行就完全不同 。如果没有那一行,make all应该是提示"all is up-to-date".如果有那一行,则是编译prog1/2/3.
3,如何用一个makefile编译多个目标使用 .PHONY, 使用方法见下面描述或参考链接. 经过测试可行.---------phony 目标可以有依赖关系 。当一个目录中有多个程序,将其放在一个makefile 中会更方便 。因为缺省目标是makefile 中的第一个目标,通常将这个phony 目标叫做"all",其依赖文件为各个程序:all : prog1 prog2 prog3.PHONY : allprog1 : prog1.o utils.occ -o prog1 prog1.o utils.oprog2 : prog2.occ -o prog2 prog2.oprog3 : prog3.o sort.o utils.occ -o prog3 prog3.o sort.o utils.o这样,使用"make"将可以将三个程序都生成了 。d当一个phony 目标是另一个的依赖,其作用相当于子程序 , 例如:.PHONY: cleanall cleanobj cleandiffcleanall : cleanobj cleandiffrm programcleanobj :rm *.ocleandiff :rm *.diff
4,linux下 一个项目源文件位于多个文件夹或者子文件夹怎么编写# Copyright (c) 2006 Unihz Technologies Co., LTD.# Author: Raymond S. <zhonghuashe@unihz.com>PROGRAM := write# 最后的可执行文件SOURCES := $(wildcard *.cpp)#通配当前目录下说有的.cpp文件#SOURCES += $(wildcard src/*.cpp)OBJS:= $(patsubst %.cpp,%.o,$(SOURCES))#把$(SOURCES)中的变量符合后缀是.cpp的全部替换成.o , CC:= gcc#CFLAGS:= -c -ggdb -Wall -DBUILD_TIME="\"`date`\"" -DDEBUGCFLAGS:=#INCLUDE := -I ../unihz -I ../config -I traffic_lightINCLUDE :=#LIB:= ../unihz/libunihz.a ../config/libconfig.a -lpthreadLIB:=#库文件.PHONY: clean install$(PROGRAM): $(OBJS) $(CC) -o $@ $^ $(LIB)%.o: %.cpp $(CC) -c $^ $(CFLAGS) $(INCLUDE)# $@:当前规则的目的文件名,$<:依靠列表中的第 一个依靠文件,而 $^:整个依靠的列表(除掉了里面所有重复的文件名) 。clean: rm *.o src/*.o $(PROGRAM) -finstall: $(PROGRAM) cp $(PROGRAM) ./bin/拿这个去该改吧,比较通用的# copyright (c) 2006 unihz technologies co., ltd. # author: raymond s. program := write # 最后的可执行文件 sources := $(wildcard *.cpp) #通配当前目录下说有的.cpp文件 #sources += $(wildcard src/*.cpp) objs := $(patsubst %.cpp,%.o,$(sources)) #把$(sources)中的变量符合后缀是.cpp的全部替换成.o,cc := gcc #cflags := -c -ggdb -wall -dbuild_time="\"`date`\"" -ddebug cflags := #include := -i ../unihz -i ../config -i traffic_light include := #lib := ../unihz/libunihz.a ../config/libconfig.a -lpthread lib := #库文件 .phony: clean install $(program): $(objs) $(cc) -o $@ $^ $(lib) %.o: %.cpp $(cc) -c $^ $(cflags) $(include) # $@:当前规则的目的文件名,$<:依靠列表中的第 一个依靠文件 , 而 $^:整个依靠的列表(除掉了里面所有重复的文件名) 。clean: rm *.o src/*.o $(program) -f install: $(program) cp $(program) ./bin/ 拿这个去该改吧,比较通用的没弄过,我记得 qmake 是 qt 的一个集成工具 , 如果你的项目是 qt 开发的(QT 有自己的开发环境,貌似不用 QT 库也可以用它开发),那么这个 IDE 我记得有工具可以帮助生成 qmake 的脚本 。autotools 其实也是自动生成的,但似乎需要自己设置后才能实现 。他们两个其实都是辅助你生成 Makefile 的东西 。自己写 Makefile 理论上也可以,不过你的项目要是编译工作量很大,那么这东西直接可以让你晕死 。也就是编译工作量不大的时候自己写那么几行就能搞定的前提下还是可以考虑的 。手工编写会写死你的 。用autotools , qmake是QT的一个工具,也能生成makefile , 不过,你不开发QT程序,就用不上qmake 。其实autotools也不好用 。如果你不开发QT程序 , 建议你用kdevelop这个开发工具 , 它可以自动生成makefile(它是自动调用autotools来生成makefile) 。

    推荐阅读