【问题标题】:Makefile to move .o files to Different DirectoryMakefile 将 .o 文件移动到不同的目录
【发布时间】:2013-07-01 07:08:57
【问题描述】:

我在一个目录中有源代码,而在另一个目录中有一个生成文件。我能够使用 make 系统的 vpath 机制编译代码。 .o 文件是在 makefile 所在的同一文件夹中创建的。但我想将这些 .o 文件移动到另一个名为 obj 的目录中。我尝试了以下方法:

vpath %.o obj

但是,它们仍被创建在与 makefile 相同的文件夹中。谁能帮我解决这个问题?

以下是 makefile 的一些突出显示的行:

PATH_TO_OBJ:- ../obj
SRC :- .c files
OBJS :- $(SRC:.c = .o)
.c.o = $(CC) $(CFLAGS) -c 
exe: cc $(LFLAGS) -o $(PATH_TO_OBJ) $(SRC).

在此之后,.o 文件也在 Makefile 的同一文件夹中创建。不移动到obj

【问题讨论】:

  • 你看看这个页面,它应该可以解决你的问题:mad-scientist.net/make/vpath.html。如果您真的想了解您的错误,请发布您的 Makefile 的最小工作示例
  • 您在$(PATH_TO_OBJ)$(SRC) 之间缺少/。它们之间也不能有空格。顺便说一句,您应该格式化您的代码以使其对其他人可读。

标签: c makefile vpath


【解决方案1】:

-o 选项定义保存输出文件的位置,由 gcc 编译器生成。

gcc main.c -c -o path/to/object/files/main.o

【讨论】:

  • 还是没有。这是我的makefile
  • 您在$(PATH_TO_OBJ)$(SRC) 之间缺少/。它们之间也不能有空格。
【解决方案2】:

Make 的VPATH 仅用于查找源文件。目标文件的位置取决于构建它们的东西。 http://mad-scientist.net/make/vpath.html 有一个很好的描述(我看到有人打我在评论中发布这个)。

*BSD 构建系统使用make 的变体,可以自动将目标文件(和其他生成的文件,包括来自 lex 和 yacc 变体的 C 源文件)放置在 /usr/obj 中。如果您可以访问该版本的make,这可能是处理您要解决的任何潜在问题的好方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多