如何在C语言的Makefile中编写条件语句?

如何在C语言的Makefile中编写条件语句?,c,gcc,makefile,C,Gcc,Makefile,我有两个C文件(myfile1.C和myfile2.C),它们执行两个不同的任务。用户只需键入: 制作程序之后,如果用户键入 /program 25 x.txt y.txt,我希望运行myfile1.c。如果用户键入/program 50 x.txt y.txt我希望运行myfile2.c。这里应该采用什么方法?听起来您希望目标程序在Makefile中构建两个文件: .PHONY: program program: myfile1 myfile2 然后编写程序,根据argv[1]执行正确的文

我有两个C文件(myfile1.C和myfile2.C),它们执行两个不同的任务。用户只需键入:
制作程序
之后,如果用户键入
/program 25 x.txt y.txt
,我希望运行myfile1.c。如果用户键入
/program 50 x.txt y.txt
我希望运行myfile2.c。这里应该采用什么方法?

听起来您希望目标程序在Makefile中构建两个文件:

.PHONY: program

program: myfile1 myfile2
然后编写
程序
,根据argv[1]执行正确的文件。下面是一个bash实现:

#!/bin/bash

if [ "$1" = "25" ]
then
    suffix=1
elif [ "$1" = "50" ]
then
    suffix2=2
else
    echo error
    exit 1
fi
# validate arguments
# shift?
./myfile$suffix "$@"

通常,您只需编写一个程序(即program.c),查看argv[1],看看它是否需要运行myfile1或myfile2的代码。

c源文件不运行。它们是源代码。程序运行。请澄清,因为听起来您需要两个不同的程序。您可以有两个目标:一个用于
program1
,另一个用于
program2
,因此用户可以运行其中一个。Makefile不是实现此功能的正确方法。它只是汇编二进制文件,之后就无法检查程序参数。您可以编写另一个C文件,
program.C
,其中包含调用其他两个模块之一的代码,具体取决于参数。这可能涉及构建三个可执行二进制文件,或者一个(或者两个,我想),这取决于您的偏好和一些您没有提供给我们的其他细节。