我正在为我的程序设计一个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索引?
答案 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
参数运行它。