[2] 命令行参数与Makefile - Puriney/practiCe-PAT GitHub Wiki

这一篇是一头一尾的故事,善始善终,龙头豹尾。

命令行参数

题库里有数十道题目,我不希望针对每一个题目写一个main文件。我希望的是写一个程序,能够根据我提供的不同题号,去做相应的解答。能够做这种活在Python里有argparse.ArgumentParser()、在Perl里有Getopt::Long,在C里可以主要用getopt()

当然因为我这里传入的参数其实有两层。第一层是专门选题号,第二层则是不同题号里可能需要不同的参数。有的题可能压根不需要输入输出文件,只打印在终端即可。所以getopt()更加适合处理第二层参数。

我参考lh3的seqtk来处理这两层命令行参数。

int main(int argc, char const *argv[])
{
	if (argc == 1) return usage();
	if (strcmp(argv[1], "02-0") == 0) {
        ElementaryArithmetic();
    }
	else {
		fprintf(stderr, "找不到['%s']题,请确认是否存在于题库中或者等待我更新\n", argv[1]);
		return 1;
	}
	return 0;
}

Makefile

Xcode作为一个IDE完全有构建、编译、清空所有与make一样的功能,只是有一个很尴尬的局面是Xcode会把编译好的程序存在一个名为Product的地方,而这个地方每次我都是Show in Finder来找到的,很是麻烦。直接了当地在终端里make更加直接。

我这里只需要产生一个程序文件即可,我猜seqtkMakefile是产生多个,所以我暂时不学他的。

参考这里实现了目前这个可以成功编译的Makefile。谨记Makefile比较笨,没法处理空格,所以全都是Tab (\t),否则make时无法执行。

捎带一句,参考这里我知道我这种写法大概是比较笨的。


明日继续填猪肚