Makefile 没有产生预期的文件输出

Posted

技术标签:

【中文标题】Makefile 没有产生预期的文件输出【英文标题】:Makefile does not produce the expected file output 【发布时间】:2017-11-10 22:38:10 【问题描述】:

我有以下 Makefile,我主要从不同的 Makefile 复制并稍作调整。出于某种原因,它正在做一些非常奇怪的事情:1) 当我运行 make 时,我没有得到可执行文件 'execute' 而是退出了 1) em>a.out,我不知道为什么。2) 我没有回来 'make:Nothing to be done for 'all' .' 当我把它背靠背时(暗示没有任何改变,因此它不需要更新,因此我认为 Makefile 的目的)。如果我背靠背,我会得到 ​​p>

    g++ stern_sim.o mag_cur_loop.o thetaddotMotion.o

我认为这意味着它仍在尝试更新它。每次我以 a.out 而不是 execute 结束时再一次。无论如何,所以对这两个问题的帮助会很棒。此外,所有缩进都使用制表符,没有空格(我检查了两次和三次)。

CC= g++
CFLAGS= -c -Wall -lm -std=c++0x
SHELL:=/bin/bash

all: execute

execute: stern_sim.o mag_cur_loop.o thetaddotMotion.o
        $(CC) stern_sim.o mag_cur_loop.o thetaddotMotion.o

stern_sim.o: stern_sim.cpp
        $(CC) $(CFLAGS) stern_sim.cpp

mag_cur_loop.o: mag_cur_loop.cpp
        $(CC) $(CFLAGS) mag_cur_loop.cpp

thetaddotMotion.o: thetaddotMotion.cpp
        $(CC) $(CFLAGS) thetaddotMotion.cpp

clean:
        rm -rf *.o execute

【问题讨论】:

execute 不是可执行文件的名称,而是规则的名称 make 用于连接您的对象文件。 【参考方案1】:

a.out 是 C 和 C++ 在类 unix 平台上生成的可执行文件的默认名称,出于历史原因。如果您想调用其他可执行文件,则需要使用-o 链接器选项:

$(CC) stern_sim.o mag_cur_loop.o thetaddotMotion.o -o execute

虽然我会说 execute 对于可执行文件来说可能是一个非常糟糕的名称。

【讨论】:

以上是关于Makefile 没有产生预期的文件输出的主要内容,如果未能解决你的问题,请参考以下文章

第四部分Makefile总述

Makefile使用总结

转载-------makefile 使用总结

linux里面的make和makefile是做啥的?

makfile

编写一个通用的Makefile文件