0
这里是或多或少通用的Makefile我想出了。它所做的是,它会检查所有的源文件,产生依赖性并创建可执行文件执行exec(相应的源文件的名字命名)。显然,每个文件都在一个文件夹中。通用Makefile文件自动make依赖于多个可执行文件
CC=gcc
CFLAGS=
LDLIBS=
BIN=exec
SRC=$(wildcard *.c)
OBJ=$(SRC:.c=.o)
all: makefile.dep $(BIN)
$(BIN): $(OBJ)
makefile.dep: $(SRC)
gcc -MM $^ > [email protected]
include makefile.dep
.PHONY: all
我想要的是以某种方式扩展这个Makefile来处理main的多重定义。我想我要做的就是从$(OBJ)删除包含像这样一个主要功能的所有源文件的目标文件:
CC=gcc
CFLAGS=
LDLIBS=
BIN=exec
BIN2=toto
SRC=$(wildcard *.c)
JOBS=$(SRC:.c=.o)
JOBS:=$(filter-out $(BIN).o,$(OBJ))
JOBS:=$(filter-out $(BIN2).o,$(OBJ))
all: makefile.dep $(BIN) $(BIN2)
$(BIN): $(OBJ)
$(BIN2): $(OBJ)
makefile.dep: $(SRC)
gcc -MM $^ > [email protected]
include makefile.dep
.PHONY: all
虽然它似乎工作,我不知道是否有一个更例如,可以实现相同的结果,而不必为每个可执行文件重复行。另外,在两个可执行文件的链接步骤中,都使用了所有的目标文件,甚至是不需要的文件(它可能引入错误?)。
如果您不希望要明确列出的源文件(即不带通配符),然后*做*可能是不正确的工具。查看更新的构建工具,如* cmake *。 – sapanoia
错误... cmake需要您明确列出源文件;甚至没有通配符_option_。所以你的评论对我没有意义。 – MadScientist