Makefile-如何保存.o一个目录?
设想以下文件夹结构:Makefile-如何保存.o一个目录?,makefile,Makefile,设想以下文件夹结构: 计划 src 代码c 生成文件 垃圾箱 如何将code.c编译成code.o并直接放入bin中?我知道我可以在src和do“mv code.o../bin”下将其编译为code.o,但如果存在编译错误,则会产生错误,对吗?即使这样,还有更好的方法吗 谢谢。您可以尝试移动,但只有在使用&&编译成功时: code.o: code.c code.h g++ -c code.c && mv code.o ../ mv code.o../仅在g+
- 计划
- src
- 代码c
- 生成文件
- 垃圾箱
- src
谢谢。您可以尝试移动,但只有在使用
&&
编译成功时:
code.o: code.c code.h
g++ -c code.c && mv code.o ../
mv code.o../
仅在g++
返回0时执行,此时编译成功。如果您有非常复杂的makefile
,这可能不适合您,但我想我会与您分享我所知道的。您仍然可以使用move方法并在编译器错误中生存:
cc -c code.c && mv code.o ../bin
如果“cc”部分出现故障,则不会运行“mv”部分。根据您的意思,该过程应该或不应该“产生错误”。如果有编译器错误,您就会知道 也就是说,使用make有几种方法。在这种情况下,最好的可能是:
- 您可以将Makefile放入bin。Make擅长使用那里的文件在这里生成文件,但不是相反。
- 您可以在makefile目标中指定目标路径:
$(MAIN_DIR)/bin/%.o: %.c
$(COMPILE)...
$(主目录)/bin/%.o:%.c
$(编译)。。。
- 有点晚了,但如果有帮助的话。
这就是如何从makefile所在的位置获取上一级目录路径
如果您的项目是这样的:$(subst $(notdir $(CURDIR)),,$(CURDIR))
$(CURDIR)将输出~/myProject/src~/myProject/ src/ Makefile #all the .c and .cpp bin/ #where you want to put the binaries.
$(subst$(notdir$(CURDIR)),$(CURDIR))将输出~/myProject更好的方法是不要使用痛苦无比的
。你也可以使用make
作为Makefile中的模式规则,这样你就可以避免显式的。/bin/.o:%.c
变量。@Dale Hagglund:我想到了这一点,但是它使Makefile变得不那么灵活。例如,您不能将其移动到其他目录。这是正确的。在较大的makefile系统中,我通常会在树的顶部找到一个$(MAIN\u DIR)
文件,它包含在较低级别的makefiles中rules.mk
将包含这样的模式规则。当然,实际的makefile仍然不是严格位置独立的,因为如果复制它们,我必须编辑必要的include路径。@Dale Hagglund:可以通过在include指令中使用绝对路径而不是相对路径,或者在运行make时使用-I选项,使较低级别的makefile(在某种程度上)可移动,告诉它去哪里找。rules.mk