我有一個包含兩個主要功能的項目,一個用於執行我的程序,另一個主要功能用於測試程序。我在網上搜索了這個,但幾乎找不到有關兩個可執行文件的遞歸生成文件。具有兩個可執行文件的遞歸生成文件
的Makefile
CC = clang
CFLAGS = -g -Wall
PROG = suggest
OBJDIR = objects
OBJS = $(OBJDIR)/suggest.o $(OBJDIR)/engine.o $(OBJDIR)/table.o $(OBJDIR)/levenshtein.o
# ... link them
$(PROG): $(OBJS) $(OBJDIR)
$(CC) $(CFLAGS) $(OBJS) -o $(PROG)
$(OBJDIR)/table.o:
$(MAKE) -C table.c
cp ../file1/table.c/table.o $(OBJDIR)
$(OBJDIR)/levenshtein.o:
$(MAKE) -C levenshtein.c
cp levenshtein.c/levenshtein.o $(OBJDIR)
# build them all...
$(OBJDIR)/%.o: %.c $(OBJDIR)
$(CC) $(CFLAGS) -c -o [email protected] $<
$(OBJDIR):
mkdir -p $(OBJDIR)
clean:
rm -rf $(OBJDIR) $(PROG)
在上面的文件,engine.c
是我的程序執行情況的主要功能但是我還有一個main
功能,以及被稱爲test.c
,做我的文件測試。 我要的是,當我運行make
命令,它應該只建立engine.c
main
功能(默認),但如果我想測試我的計劃,我應該能夠通過指定這樣的運行test.c
main
功能,實例make test
。
問題是我沒有測試文件的生成文件。我的目錄是這樣的:engine.c,suggest.c,test.c然後我有另一個名爲levenshtein.c的文件夾,並且有它自己的makefile。另外我只想使用兩個makefile。我已經寫了一個在levenshtein.c文件夾中的文件夾,而我遇到的問題是這一個,因爲此文件夾包含兩個main
函數。我希望基於該命令進行條件編譯。
makefiles通常只會構建(編譯)您的代碼。你確定你真的想在運行'make'命令時執行'engine.c'' main'函數嗎?或者在這種情況下「執行」是指「構建」? – anatolyg
我對遞歸關鍵字有點困惑。我在這裏沒有看到任何遞歸。另一方面,你可以指定'test:'並在其中添加邏輯(例如''clean'')。 – IvRRimUm
我的不好,我的意思是建立我的文件,而不是執行。 @anatolyg – Saad