簡體   English   中英

如何用-S和-c編寫makefile來編譯?

[英]How to write makefile to compile with -S and -c?

我有一個源文件test.c和它的頭test.h ,一個文件main.cmakefile 我想設置我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM