linux - 为包含一些已安排文件夹的项目编写 makefile

标签 linux makefile

我有下面的 makefile 和一个目录树:

->project/src/main.c, func.c, 生成文件

->项目/exe/

->项目/公司/

->项目/对象/

  cc=gcc
    cflags=-c
    obj=../obj
    exe=../exe
    inc=../inc
    prog.exe: main.o func.o
        $(cc) main.o func.o -o $(exe)/prog.exe
    main.o: main.c $(inc)/defs.h
        $(cc) $(cflags) main.c
        mv main.o $(obj)/
    func.o: func.c $(inc)/defs.h
        $(cc) $(cflags) func.c
        mv func.o $(obj)/

问题是,main.o 和 func.o(以 mv 开头的)下面的第二个操作不起作用(即 main.o 未移至/obj 目录)。是不是makefile的语法或者其他的有问题?

最佳答案

一个明显的问题是 makefile 没有构建它应该构建的目标。即:

prog.exe: main.o func.o
    $(cc) main.o func.o -o $(exe)/prog.exe

不构建 prog.exe,而是构建 $(exe)/prog.exe,这是一个不同的文件。解决办法是:

$(exe)/prog.exe: $(obj)/main.o $(obj)/func.o
    $(cc) $^ -o $@

更喜欢使用 automatic variables用于输入和输出文件的名称,以避免重复和愚蠢的拼写错误。

关于linux - 为包含一些已安排文件夹的项目编写 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486199/

相关文章:

c++ - 无法使用 make 找到 header

linux - 增加或增加作为 grep 结果的整数

linux kernel crypto API,在AES-GCM算法中如何设置aad的长度为零位?

linux - Solaris 是否有 popen 问题?

linux - 使用 "include makefile"的正确方法是什么?

c++ - makefile 混淆中的链接器库路径

makefile - 如何检查 Makefile 中是否存在文件以便将其删除?

linux - nginx 作为运行 apache 的反向代理

c - 使用具有不同路径名的 Makefile 构建 Linux 内核模块

Linux内核无法接收多播