想象一下以下文件夹结构:
如何将code.c编译为code.o并直接将其放入bin中?我知道我可以将它编译到src下的code.o和do“mv code.o ../bin”但如果出现编译错误会产生错误,对吧?即使它以这种方式工作,有没有更好的方法呢?
感谢。
答案 0 :(得分:5)
根据您的意思,该过程应该或不应该“产生错误”。如果有编译错误,你就会知道。
也就是说,make有几种方法可以做到。在这种情况下最好的可能是:
$(MAIN_DIR)/bin/%.o: %.c $(COMPILE)...
答案 1 :(得分:2)
有点晚了,但如果有帮助的话。 这就是我从makefile所在位置获取一级目录路径的方法。
$(subst $(notdir $(CURDIR)),,$(CURDIR))
如果你的项目是这样的:
~/myProject/
src/
Makefile
#all the .c and .cpp
bin/
#where you want to put the binaries.
$(CURDIR)将输出〜/ myProject / src
$(subst $(notdir $(CURDIR)),, $(CURDIR))将输出〜/ myProject
答案 2 :(得分:0)
您可以尝试移动,但只有在使用&&
编译成功时才会:
code.o: code.c code.h
g++ -c code.c && mv code.o ../
mv code.o ../
仅在g++
返回0时执行,即编译成功时。如果你有一个非常复杂的makefile
,这可能不适合你,但我想我会分享我所知道的。
答案 3 :(得分:0)
您仍然可以使用移动方法并避免编译错误:
cc -c code.c && mv code.o ../bin
如果“cc”部分失败,则不会运行“mv”部分。