将 makefile 与多个 C 程序一起使用
Using makefile with multiple C programs
我在不同的文件中编写了多个 C 程序,我想 运行 同时在同一个 argv 上
所有这三个程序:
这就是我到目前为止所尝试的,但它只是 运行 最后一个程序 digcmp.c:
CC=gcc
a_OBJS=lexcmp.o
b_OBJS=lencmp.o
c_OBJS=digcmp.o
EXEC=lex len dig
DEBUG = -g
CFLAGS = -std=c99 -Wall -Werror $(DEBUG) #if you have CFLAGS you do not have to write for each file $(CC) -c $*.c!!!
lex: $(b_OBJS)
$(CC) $(a_OBJS) -o $@
len: $(b_OBJS)
$(CC) $(b_OBJS) -o $@
dig: $(c_OBJS)
$(CC) $(c_OBJS) -o $@
lexcmp.o: lexcmp.c
lencmp.o: lencmp.c
digcmp.o: digcmp.c
clean:
rm -f lex $(a_OBJS)
rm -f len $(b_OBJS)
rm -f dig $(c_OBJS)
make
节目有很多implicit rules。事实上,正是它们让您的 lexcmp.o: lexcmp.c
(等)规则发挥作用。
您所需要的只是列出使可执行程序本身成为可执行程序的规则:
lexcmp: lexcmp.o
lencmp: lencmp.o
digcmp: digcmp.o
以上内容本身就很好Makefile
,如果你运行例如
$ make lencmp
然后 lencmp.c
源文件将被构建到目标文件 lencmp.o
中,然后链接到可执行的 lencmp
程序中。
如果您在构建时需要特定的编译标志,只需设置 CFLAGS
变量即可自动使用。我还推荐一个默认目标,它可能会将所有可执行目标列为依赖项以构建所有这些目标:
CFLAGS = -Wall -Wextra
.PHONY: all
all: lexcmp lencmp digcmp
这应该足以构建带有所需标志的所有可执行文件(跳过 object-file 中间阶段)。
The .PHONY
target 告诉 make
它不应该生成名称为 all
.
的文件
我在不同的文件中编写了多个 C 程序,我想 运行 同时在同一个 argv 上
所有这三个程序:这就是我到目前为止所尝试的,但它只是 运行 最后一个程序 digcmp.c:
CC=gcc
a_OBJS=lexcmp.o
b_OBJS=lencmp.o
c_OBJS=digcmp.o
EXEC=lex len dig
DEBUG = -g
CFLAGS = -std=c99 -Wall -Werror $(DEBUG) #if you have CFLAGS you do not have to write for each file $(CC) -c $*.c!!!
lex: $(b_OBJS)
$(CC) $(a_OBJS) -o $@
len: $(b_OBJS)
$(CC) $(b_OBJS) -o $@
dig: $(c_OBJS)
$(CC) $(c_OBJS) -o $@
lexcmp.o: lexcmp.c
lencmp.o: lencmp.c
digcmp.o: digcmp.c
clean:
rm -f lex $(a_OBJS)
rm -f len $(b_OBJS)
rm -f dig $(c_OBJS)
make
节目有很多implicit rules。事实上,正是它们让您的 lexcmp.o: lexcmp.c
(等)规则发挥作用。
您所需要的只是列出使可执行程序本身成为可执行程序的规则:
lexcmp: lexcmp.o
lencmp: lencmp.o
digcmp: digcmp.o
以上内容本身就很好Makefile
,如果你运行例如
$ make lencmp
然后 lencmp.c
源文件将被构建到目标文件 lencmp.o
中,然后链接到可执行的 lencmp
程序中。
如果您在构建时需要特定的编译标志,只需设置 CFLAGS
变量即可自动使用。我还推荐一个默认目标,它可能会将所有可执行目标列为依赖项以构建所有这些目标:
CFLAGS = -Wall -Wextra
.PHONY: all
all: lexcmp lencmp digcmp
这应该足以构建带有所需标志的所有可执行文件(跳过 object-file 中间阶段)。
The .PHONY
target 告诉 make
它不应该生成名称为 all
.