通过 Makefile 的命令行参数

标签 c compilation linker makefile

我正在为我的一个程序设计一个 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/

相关文章:

c - 使用指针/数组差异赋值

performance - Normalize.css 应该作为单独的文件保存还是编译(通过 postcss @import)到最终的 "styles.css"文件中?

具有多个皮肤的 C# Windows 窗体应用程序——条件编译是一个好的解决方案吗?

c - 链接 : making virtual address corresponding to file offset

c++ - 在没有 -fPIC 的情况下将静态库链接到共享库

c++ - 在 Windows 上使用 GCC 的链接时间优化构建 wxWidgets DLL 时出错

C - 将数字列表与数组进行比较

C - 无限循环

c - 将一个字节递增一个,就好像它是一个 Base10 数字一样

delphi - 如何在一个应用程序中同时拥有 VCL 和 FMX?