我正在尝试编写一个生成汇编文件的makefile (通过使用-S标志调用gcc),然后修改生成的s.-files 然后编译它。为了找到一种方法,我做了一个简短的样本 当我精确列出.s-sourcefiles的名称(main.s,mod1.s等)时,makefile工作正常。
"Hello! Are you tired? No, not at all!"
这是按预期工作的。 但是当我定义依赖性的时候 更通用(“%。o:%。s”) 不再生成程序集(.s)文件:
from socket import *
BUF_LEN = 8192 * 100000
info = getaddrinfo('google.com', 80, AF_INET)
addr = info[-1][-1]
print(addr)
client = socket(AF_INET, SOCK_STREAM)
client.connect(addr)
client.send(b"GET /index.html HTTP1.1\r\nHost: www.google.com\r\n")
print(client.recv(BUF_LEN).decode("utf-8")) # print nothing
任何解释,即想法如何实施这些步骤?
答案 0 :(得分:2)
答案 1 :(得分:0)
非常感谢yugr,-r标志是相关提示! 对于任何扼杀相同行为的人: 以下makefile(与上面相比,.PRECIOUS:已添加%.s)生成所需的输出(.s和.o文件):
objects = main.o mod1.o
assembly = main.s mod1.s
.PRECIOUS: %.s
app : $(objects)
gcc -o app $(objects)
chmod +x app
%.s : %.c
gcc -S $<
# here some code will be called to modify
# the .s file for some experimental purpose ..
%.o : %.s
gcc -c $<
cleanobj :
rm app $(objects)
cleanass :
rm $(assembly)
cleanall : cleanobj cleanass
生成,用
调用 make
cc -c -o main.o main.c
cc -c -o mod1.o mod1.c
gcc -o app main.o mod1.o
chmod +x app
但是在用
调用时 make -r
gcc -S main.c
gcc -c main.s
gcc -S mod1.c
gcc -c mod1.s
gcc -o app main.o mod1.o
chmod +x app
即。创建了所需的.s文件,这也导致了一个可执行的应用程序。
请注意目标文件夹中不存在.o或.s文件。