我正在使用GNU make工具在AIX上编译C项目,并希望.o
文件安装在我项目下的build
目录中。但是,当前配置会将.o
放在project
所在的makefile
目录中。目录结构是:
project
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
下。
谢谢。
答案 0 :(得分:1)
有两件事:
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 $@ $<
$@
是规则&#39> 目标 $?
是目标 dependents $<
是第一个依赖(请注意,当目标有多个.c
依赖项时,不会使用此当然可以采取进一步措施:
clean
目标如here所述。
答案 1 :(得分:1)
修正很简单
需要明确定义结果文件的位置。
使用'-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.