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