对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在 C/C++ 文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件( O 文件或是 OBJ 文件)。 链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(...
clean: rm -rf $(basename $(TARGET)) $(SRCS:.c=.o)[user@13:14 src]$ make执行下,结果怎么样呢: [objc] view plain copy[user@13:35 src]$make //编译了myhello.c,自动处理了头文件abc.h test.h的包含关系 gcc -c -I. -Icommon/ -Icommon/test -Wall myhello.c -o myhello.o gcc ...
#生成.o的对自己目录中.h .c的依赖信息.d文件到.c所在的路径中 #$(DEF)文件是.d文件名列表(含目录),比如tree.d 匹配成功那么%就是tree,然后在尝试%.c,如果成功。则执行规则 # $(<:.c=.o)是获取此.c文件的名字(含路径),然后变为.o比如 src/xxx.o。 以形成如下 # src/xxx.o : src/xxx.c ...
SRCS := main.c file1.c file2.c # 生成目标文件 OBJS := $(SRCS:.c=.o) # 默认目标 all: $(TARGET) # 生成可执行文件 $(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $@ $^ # 生成目标文件 %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ # 清理目标文件和可执行文件 clean: rm -f $...
列如在子目录subdir目录下有个Makefile文件,来指明这个目录下文件的编译规则。外部总Makefile可以这样写subsystem: cd subdir && $(MAKE) 其等价于: subsystem: $(MAKE) -C subdir 定义$(MAKE)宏变量的意思是,也许我们的make需要一些参数,所以定义成一个变量比较有利于维护。两个例子意思都是先进入"subdir"目录...
在上面的makefile当中我们定义了一个变量cflags并且在编译命令当中使用,我们定义变量的方法其实和shell差不多,我们直接使用=可以定义变量,然后使用$(变量名)可以使用变量,因为上面的例子当中cflag=-c比较短,比较简单,但是如果当我们的编译参数很多很长的时候使用变量就非常有效了,而且如果在一个项目当中如果有成千上万...
gcc -c xyz.c -o xyz.o -g .PHONY:clean clean: rm main main.o abc.o xyz.o -f 3. Makefile书写规则 规则包含两个部分,一个是==依赖关系==,一个是==生成目标的方法==。 在Makefile中,规则的顺序是很重要的,因为,**==Makefile中只应该有一个最终目标==,其它的目标都是被这个目标所连带出来...
这种makefile文件就能自动智能调用moc和uic对源程序进行预处理和编译。qmake当然必须也是跨平台的,跟c...
OBJ=$(patsubst %.c,%.o,$(SRC)) 控制Make的行为 make -B 强制重新编译所有目标; make -n 显示将要执行的命令而不实际执行; make -f指定使用其他名称的Makefile文件; make -j 允许并行执行(多核编译)。 高级用法 - 条件判断 Makefile也支持条件判断,这在不同环境需要执行不同命令时非常有用。