通过Makefile的命令行参数

时间:2014-04-21 21:38:01

标签: c compilation linker makefile

我正在为我的程序设计一个makefile,它运行一个简单的文本编辑程序并接收一个命令行参数的文件。但是,我遇到的问题是,当我尝试在makefile中传入一个命令行参数时,编译器似乎不会确认该文件或给出某种错误来指示链接出错了。我的makefile源代码如下所示:

1 all:  basic.c
2   gcc -o basic2 basic2.c data
3 write:  basic2.o
4   gcc -o basic2 basic2.o
5 basic2.o: basic2.c
6   gcc basic2.c data

以及结果输出:

Must name an input file

如果在没有参数的情况下运行basic2.c(例如数据),这就是程序应该打印出来的内容。我应该将参数移到另一行,还是有更好的方法来写出这段代码?

另外,作为参考,basic2.c使用以下代码:

    main(int argc, char *argv[])
7 {
8   if(argc > 2)  {
9     printf("Too many file names\n");
10     exit(0);
11   }
12   if(argc != 2) {
13     printf("Must name a file\n");
14     exit(0);
15   }

我是否引用了错误的argv索引?

2 个答案:

答案 0 :(得分:2)

您似乎试图在第三个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将构建basic2(如果已更改),然后运行代码。

命令make write将与make完全相同。

命令make basic2将在必要时编译。

当然,在这种情况下,all: write不是必需的,但如果您想要一起构建其他内容,那么在write之后添加更多依赖项会很有用。

答案 1 :(得分:0)

这样的事情:

runit: basic2
    ./basic2 data

basic2: basic.o
    gcc -o basic2 basic2.o

basic2.o: basic2.c
    gcc -c basic2.c

然后你可以make runit来编译程序,然后使用data参数运行它。