我正在为我的一个程序设计一个 makefile,该程序运行一个简单的文本编辑程序并接收一个文件作为命令行参数。不过,我遇到的问题是,当我尝试在 makefile 中传递命令行参数时,编译器要么似乎不承认该文件,要么给出某种错误来指示链接出错。我的 makefile 源代码如下所示:
all: basic.c
gcc -o basic2 basic2.c data
write: basic2.o
gcc -o basic2 basic2.o
basic2.o: basic2.c
gcc basic2.c data
和结果输出:
Must name an input file
如果 basic2.c 在没有参数(例如数据)的情况下运行,这就是程序应该打印的内容。我应该将参数移到另一行,还是有更好的方法来写出这段代码?
此外,作为引用,basic2.c 使用了以下代码:
main(int argc, char *argv[])
{
if(argc > 2) {
printf("Too many file names\n");
exit(0);
}
if(argc != 2) {
printf("Must name a file\n");
exit(0);
}
}
我是否引用了错误的 argv 索引?
最佳答案
看起来您正在尝试运行 basic2
在你的第三个make
堵塞。如果您的意图是让第一个 make 目标既编译又运行,您可能打算这样做:
# All depends on write, which depends on basic2, which depends on basic2.c
all: write
# Command to run
write: basic2
./basic2 data
# Command to compile
basic2: basic2.c
gcc -o basic2 basic2.o
然后,使用命令 make
将 build basic2
如果它已经改变,然后运行代码。
命令make write
将与 make
做同样的事情.
命令make basic2
将在必要时编译。
当然,all: write
在这种情况下不是必需的,但是如果您有其他想要一起构建的东西,那么在 write
之后添加更多依赖项会很有用。 .
关于通过 Makefile 的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23206467/