我想寫我認爲是相當簡單的Makefile,我只是感到困惑!我不是一個生成文件的作家,但我認爲我足夠了解它們,以便能夠簡單地工作。與GCC Makefile拼搏
好的,我在一個目錄中有一個小項目,在這個目錄下也是一個包含許多.c文件的libs目錄。我想要做的是編寫一個makefile,將/ libs目錄的內容構建到/ libs目錄中的一個靜態lib文件中,然後編譯/目錄中的一些源文件並將其與建立的.a鏈接起來文件。
我敢肯定有人在會建議「爲什麼不使用cmake的」,但是這不回答我要找(波的手像絕地.. ehehehehe)
CC = gcc
CFLAGS = -Wall
SOURCES = lzx.c csum.c dirs.c listner.c tree.c
OBJECTS = $(SOURCES:.c=.o)
TARGETLIB = libs/mylib.a
TARGET = TestApp
libs/%.o : libs/%.c
$(CC) $CFLAGS -c $<
$(TARGETLIB) : $(OBJECTS)
ar rcs [email protected] $^
$(TARGET) :
$(CC) $CFLAGS Source1.cpp Source2.cpp -llibs/mylib.a -o [email protected]
我的理解是,第一個配方,將所有的.c文件編譯成對象,但它似乎編譯第一個.c文件,然後停止。
任何幫助任何人都可以給我,將不勝感激。
請參閱[本](http://stackoverflow.com/a/16751650/841108)&[that](http://stackoverflow.com/a/26689798/841108)示例。使用'make'跟'make -trace'或[remake](http://bashdb.sourceforge.net/remake/)'-x'。使用$([patsubst](https://www.gnu.org/software/make/manual/html_node/Text-Functions.html)...);或者有一個內部'libs/Makefile'並使用'$(MAKE)-C libs' –
感謝Basile,但我已經看過這些例子,儘管它們很接近,但它們並不完全符合我的要求試圖去做。我的主要問題是%.o:%.c在我的腦海裏應該編譯libs /目錄中的所有.c文件,但實際上只編譯列表中的第一個文件,然後因爲我無法解釋的原因而失敗。 make --trace是個好主意。 –
所以'libs /'包含'lzx.c csum.c dirs.c listner.c tree.c',那些是你想要編譯和組合起來形成'libs/mylib.a'的文件,對嗎? – Beta