GNU make和对象列表
发布时间:2020-12-16 06:52:13 所属栏目:百科 来源:网络整理
导读:我有大约10个带头文件(.h)的源文件(.c). 只有两个源文件(.c)链接到可执行文件(ELF)并包含main函数.大多数文件被编译为对象(.o)和(重新)与可执行文件一起使用(静态链接). 我试图定义一个通用规则来构建所有对象: %.o : %.c $(CC) $(CCFLAGS) -c -o $@ $ 这对
我有大约10个带头文件(.h)的源文件(.c).
只有两个源文件(.c)链接到可执行文件(ELF)并包含main函数.大多数文件被编译为对象(.o)和(重新)与可执行文件一起使用(静态链接). 我试图定义一个通用规则来构建所有对象: %.o : %.c $(CC) $(CCFLAGS) -c -o $@ $< 这对于编译为对象的源非常有用.每次添加新的源文件时,我都不必担心更新make文件. 但我不知道创建可执行文件规则的最佳方法是什么? exec1 : object1.o object2.o object3.o call the linker exec2 : object1.o object2.o object4.o object5.o call the linker 这将有效;但是,每当我要包含一个新的头文件(foo.h)时,我还需要记住更新这个规则的对象列表(添加foo.o). 有没有什么方法可以自动解决给定目标所需的对象(可能基于包含的头文件?)? 有没有更好的方法来定义可执行文件的目标? 请注意我不能使用通配符,因为并非所有可执行文件都需要所有对象.或链接器可以删除多余的对象? 谢谢! 解决方法
您可以使用通配符功能自动执行文件列表维护
sources := $(patsubst %.c,%.o,$(wildcard *.c)) 你还应该制作一个头文件列表 headers := $(wildcard *.h) 并将它们添加到编译规则中 %.o : %.c $(headers) GNU Make手册(https://www.gnu.org/software/make/manual/make.html)有更多信息,包括可能的陷阱. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |