可以在与正在构建的同一 makefile 中执行 C 程序吗?

Posted

技术标签:

【中文标题】可以在与正在构建的同一 makefile 中执行 C 程序吗?【英文标题】:Can a C program be executed, in the same makefile as it is being built? 【发布时间】:2016-04-24 14:45:51 【问题描述】:

我有一个构建我的 .C 项目的生成文件,并生成一个可执行文件。我知道这可以从终端使用命令 ./(NAME) 运行。

我的问题是 - 是否可以在 makefile 中实际构建和运行,这样我就可以在终端中键入“make”,程序将被构建和运行,所有这些都来自这个文件& 命令? (无需手动运行可执行文件)。

谢谢:)

【问题讨论】:

是的;这是可能的。 是的,这是可能的。我不太了解makefile,但如果你的主要可执行文件名为test,你可以这样做:test: $(CC) test.cpp -o test && ./test 【参考方案1】:

不知道你的makefile是什么,但你可以这样做:

PROGARGS=

.PHONY:all run

all:prog

#...

run:all
    ./prog $(PROGARGS)

【讨论】:

【参考方案2】:

是的,可以。

例如:

TARGET=hoge
CC=gcc

.PHONY: compileandrun
compileandrun: $(TARGET)
    ./$(TARGET)

$(TARGET): $(TARGET).c
    $(CC) -o $(TARGET) $(TARGET).c

如果你在可写的当前目录中有这个Makefile和源代码hoge.c,程序将被编译并使用make命令运行。

【讨论】:

【参考方案3】:

其他答案都不错;但是,您可以使用这个其他变体(一种快速而肮脏的解决方案)。

假设你的makefile 有这行来构建你的程序:

NAME:
    gcc source.c -o NAME

你可以直接在下面添加你的运行命令:

NAME:
    gcc source.c -o NAME
    ./NAME

这与&& 连接的作用相同:它运行第一个命令,如果成功,也运行第二个命令。

【讨论】:

【参考方案4】:

只要你正确地排序你的makefile依赖,没有什么能阻止你从makefile运行你的C程序。也就是说,大多数人都希望 makefile 只是构建文件,而不是同时运行它。

我建议只在命令行的一行中编写 make 命令和 run 命令。这样你只需要按一次回车,而不需要在 makefile 本身做任何花哨的事情。如果你的 shell 支持历史补全,下次你想再次构建和运行时,你只需要按“UP”和“ENTER”...

make && ./NAME

如果您真的想将所有内容都放在 makefile 中,我建议在您的 makefile 中创建一个单独的“运行”目标,以减少混淆的可能性,例如 jdarthenay 的 answer。

【讨论】:

以上是关于可以在与正在构建的同一 makefile 中执行 C 程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

makefile教程

我应该如何从 Makefile.am 运行预构建的 Makefile?

转载你知道 Linux 内核是如何构建的吗?

如何提高 Makefile 的速度?

make命令和makefile

如何在同一窗口中执行 emacs grep-find 链接?