加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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)有更多信息,包括可能的陷阱.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读