假设我正在创建一个程序和一个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中的规则可以通过在编译命令中使用不同的值来构建不同的程序。