[英]How to write makefile to compile with -S and -c?
我有一個源文件test.c
和它的頭test.h
,一個文件main.c
和makefile
。 我想設置我的makefile,以便它(1)編譯test.c
以構建可執行的test.o
,並且(2)編譯test.c
以使用-S
標志將匯編代碼打印到test.s
我試圖設置makefile,因為我認為是正確的,但這當然不會運行最后一個test.s
行。
FLAGS = -c -Wall
CC = gcc
ASM = -S
all : optimize
optimize: main.o test.o
$(CC) main.o test.o -o optimize
main.o: main.c test.h
$(CC) $(FLAGS) main.c
test.o: test.h test.c
$(CC) $(FLAGS) test.c
test.s: test.h test.c
$(CC) $(ASM) -Wall test.c
誰能告訴我如何我應該有這種不同的結構, 同時創建test.s和test.o?
我嘗試將optimize:
line和以下內容更改為:
optimize: main.o test.o test.s
$(CC) main.o test.o test.s -o optimize
但是鏈接器錯誤地multiple definition of 'test'
。
只需將test.s添加到以optimize:
開頭的行。
這樣做是將規則test.s
添加到優化行的依賴項中。
您也可以按照Vaughn Cato的建議將其添加到所有行。
重要的是要知道規則test.s和文件test.s之間存在差異
您可以將任何您想要的內容作為規則的名稱,但按照慣例,您通常只使用文件名。
這是一個可以做你想做的Makefile的例子。 我把dep放在所有,所以你可以make asm
,我也將規則名稱更改為asm以保持清晰。
FLAGS = -c -Wall
CC = gcc
ASM = -S
all : optimize asm
optimize: main.o test.o
$(CC) main.o test.o -o optimize
main.o: main.c test.h
$(CC) $(FLAGS) main.c
test.o: test.h test.c
$(CC) $(FLAGS) test.c
asm: test.h test.c
$(CC) $(ASM) -Wall test.c -o test.s
最后,因為你對Makefiles的工作方式看起來有點不穩定(我不誠實地責怪你),我建議你閱讀這個教程: http : //mrbook.org/tutorials/make/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.