在makefile中使用命令行输入

问题描述 投票:0回答:3

我目前有一个makefile,运行时它将链接.h和.c文件,然后创建一个二进制文件。是否可以通过仅在make之后执行输入file_name来使makefile执行此二进制文件?

我的makefile看起来像这样:

CC = g++
cppflags = "-std=c++0x"
all : interpreter

byte.o : opcode.h byte.h byte.cpp
    $(CC) -c $(cppflags) byte.cpp
interpreter : byte.o main.cpp
 $(CC) $(cppflags) byte.o main.cpp -o interpreter

[如果执行make,我将获得以输入文件名作为参数的可执行文件interpreter。我想做的是修改我的Makefile,以便可以使Makefile运行可执行文件,而不必使用已经拥有的Make创建的二进制文件。输入的文件名不能被硬编码。

c++ makefile compilation
3个回答
0
投票

尝试这个简单的例子:

make <file_name>

当您运行“ make a”时,也可以执行。 “ make b”,b.o可执行文件。


0
投票

通常,您在要创建的目标(例如 a : a.c gcc a.c -o a.o ./a.o b : b.c gcc b.c -o b.o ./b.o )上调用make,而不是在输入文件(make不知道如何构建)上调用make。解决此问题的一种常用方法是定义一个(基于规则的)执行代码的目标。例如.res(结果为'.res')。目标将运行程序并将输出保存到make interpreter文件。

您将使用make input_file_name.res调用目标

.res

请注意在运行此目标之前要显式依赖构建解释。

有关%.res: % interpreter interpreter $< > $@ (输入文件)和$<(输出文件)的更多信息,请参见使“显式”变量。


0
投票

不要尝试使make接受要构建的目标以外的参数。

代替创建脚本:

$@

并使用参数运行:

#! /bin/sh
# rebuild if necessary
make
# run interpreter with arguments
interpreter "$@"

有关详细说明,为什么这样做和makefile黑客的注意事项读了我对另一个类似问题的回答:$ ./buildtheninterpret.sh filenametointerpret

© www.soinside.com 2019 - 2024. All rights reserved.