来自同一源文件的不同可执行文件?

  • 本文关键字:可执行文件 源文件 c
  • 更新时间 :
  • 英文 :


假设我正在创建一个程序和一个makefile,并且我希望能够创建三个不同的可执行文件,它们具有不同的名称,都具有不同的功能,都使用相同的源文件。这有可能吗?

选项1

写一个程序检查argv[0],看看它是用什么名字执行的,并以此为基础进行分支:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
size_t length = strlen(argv[0]);

if (3 <= length && strcmp(argv[0]+length-3, "foo") == 0)
printf("This is the foo program.  It does foo things.n");
else if (3 <= length && strcmp(argv[0]+length-3, "bar") == 0)
printf("This is the bar program.  It does bar things.n");
else
printf("This is the default program.  It does default things.n");
}

编译程序并将可执行文件命名为x或其他名称

假设您使用的是Unix版本,请将文件链接到更多名称:

ln x fooln x bar

使用不同的名称运行程序:

<>之前%/x这是默认程序。它做默认的事情。%/foo。这是foo程序。它做了很多事情。%/酒吧。这是酒吧项目。它做了很多事情。h2以前 <>选项2使用预处理器符号来构建不同的程序。源代码可以是:

#if   Option == 1
#include "Program1.c"
#elif Option == 2
#include "Program2.c"
#else
#include "ProgramDefault.c"
#endif

源代码不必放在单独的文件中。以上只是一个例子,所有的源代码都可以直接在文件中,而不是包含在#include中。

使用GCC和Clang,您可以在命令行上用-DOption=value定义一个预处理器符号来编译程序。makefile中的规则可以通过在编译命令中使用不同的值来构建不同的程序。

最新更新