C 设置Makefile的目标位置

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 : $

我正在用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 : $(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)config.o
    目标没有生成正确的输出文件。修复这里提出的问题实际上可以解决这个问题。实际上,我根本不知道它是如何工作的,因为`$(build)main`配方应该尝试使用它正在查找的位置不存在的对象文件。它试图使用
    $(build)config.o…
    ,但实际的
    .o
    文件位于顶层。路径变量名和文件名之间不应该有
    /
    s吗?e、 g.
    $(构建)/config.o
    而不是
    $(构建)config.o