设置Makefile的目标位置

时间:2015-07-09 16:30:00

标签: c makefile

我正在使用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.omain均位于project下,而不是project/build下。

谢谢。

2 个答案:

答案 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.