[英]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.