如何重构我的文件,以便我可以更容易地编译具有相同名称的单独程序?

时间:2013-09-06 23:57:37

标签: makefile

在进行竞争性编程时,我将每个问题都放在一个包含测试和解决方案的自包含目录中,类似于以下内容:

problem_a/
  tests/
    default.in default.out
  main.c

我还希望能够编译解决方案(总是单个文件)并通过输入输入文件并通过简单的命令行命令将结果与输出文件区分开来运行它。我通常使用类似于以下内容的东西:

make main && (./main < tests/default.in | diff tests/default.out - ; rm main)

现在我希望能够在同一目录中拥有多个(不同编程语言)解决方案。例如,要添加main.cpp。但是,这与上述命令冲突,因为make总是优先于CPP规则的默认C规则。

最实际的解决方案是使用额外的_c_cpp描述符对文件名进行后缀吗?我的纯粹主义者认为这是多余的,希望有更好的方法,或许可以重新排序make的默认规则?

1 个答案:

答案 0 :(得分:0)

我最终为解决方案创建了一个目录,以便在运行make时没有名称冲突:

problem_A/
  solutions/
    cpp/
      main.cpp
    ansi-c/
      main.c
  tests/
    default.in
    default.out

然后我编写了一个简单的脚本,以便能够一起构建和测试:

  3 BINFILE=./solutions/$1/main
  4 INFILE=./tests/$2.in
  5 OUTFILE=./tests/$2.out
  6 
  7 make $BINFILE && ($BINFILE < $INFILE | diff $OUTFILE - ; rm $BINFILE)

此脚本可以按如下方式运行:

cp-test ansi-c default

不是最优雅的解决方案,但它现在有效。任何其他建议都会很棒。