C 设置Makefile的目标位置
我正在用GNU make工具在AIX上编译一个C项目,希望C 设置Makefile的目标位置,c,makefile,C,Makefile,我正在用GNU make工具在AIX上编译一个C项目,希望.o文件安装在我的项目下的build目录中。但是,当前配置将.o放在项目目录中,生成文件位于该目录中。目录结构为: 项目 src/ build/ makefile 源文件位于src/中 makefile包含以下文本: src = /PATHTO/project/src/ build = /PATHTO/project/build/ objects = $(build)config.o #(...) $(build)main : $
.o
文件安装在我的项目下的build
目录中。但是,当前配置将.o
放在项目
目录中,生成文件
位于该目录中。目录结构为:
项目
src/
build/
makefile
src/
中
makefile
包含以下文本:
src = /PATHTO/project/src/
build = /PATHTO/project/build/
objects = $(build)config.o #(...)
$(build)main : $(objects)
cc -o main $(objects)
$(build)config.o : $(src)config.c $(src)config.h
cc -c $(src)config.c
这个makefile
可以工作,但是config.o
和main
都放在project
下,而不是project/build
下
谢谢。有两件事:
- 构建
时未指定文件夹;它默认为当前目录(main
)/PATHTO/project
- 编译
时未指定输出;它也默认为当前目录config.c
$(build)config.o
(除非您手动将其复制到那里)
要使事情正常进行,请将规则修改为:
$(build)main : $(objects)
cc -o $@ $?
$(build)config.o : $(src)config.c $(src)config.h
cc -c -o $@ $<
$(构建)主:$(对象)
cc-o$@$?
$(build)config.o:$(src)config.c$(src)config.h
cc-c-o$@$<
是规则的目标$@
是目标的从属对象$?
$更正很简单 需要专门定义结果文件的位置 该位置是通过使用“-o”参数定义的 因此,请使用:
src = /PATHTO/project/src/ build = /PATHTO/project/build/ objects = $(build)config.o #(...) $(build)main : $(objects) CC -o $@ $(objects) $(build)config.o : $(src)config.c $(src)config.h CC -c $< -o $@ -I.
编译器的src=/PATHTO/project/src/ build=/PATHTO/project/build/ objects=$(build)config.o#(…) $(生成)主:$(对象) CC-o$@$(对象) $(build)config.o:$(src)config.c$(src)config.h 抄送-c$<-o$@-I。
标志正在设置输出路径。该生成文件实际上无法正常工作。它无法仅正确重建需要重建的内容,因为-o
目标没有生成正确的输出文件。修复这里提出的问题实际上可以解决这个问题。实际上,我根本不知道它是如何工作的,因为`$(build)main`配方应该尝试使用它正在查找的位置不存在的对象文件。它试图使用$(build)config.o
,但实际的$(build)config.o…
文件位于顶层。路径变量名和文件名之间不应该有.o
s吗?e、 g./
而不是$(构建)/config.o
$(构建)config.o