如何配置cmake以使用两个不同的编译器两次编译文件?

时间:2015-07-30 10:10:16

标签: c++ parallel-processing cmake opencl

我正在将一个SYCL / OpenCL内核添加到使用cmake构建的并行C ++程序中。使用SYCL意味着我需要让cmake编译我的C ++源文件两次:一次使用SYCL编译器,一次使用项目的默认编译器,即GCC。两种编辑都产生了在链接时需要包含的输出。

我对cmake完全不熟悉。我已经将GCC编译和链接步骤添加到项目的CMakeLists.txt中,但是添加SYCL编译步骤的最佳方法是什么?我正在尝试使用“PRE_BUILD”的“add_custom_command”选项,但运行的命令似乎不知道提供给正常编译和链接步骤的路径:当前工作目录,包括目录,源目录等我必须手动指定所有这些,我必须先把它们中的一些弄清楚。

感觉我正在努力做到这一点。是否有推荐(或至少更好)的方法让cmake用两个不同的编译器编译文件两次?

此外,曾经有一个SYCL标签,但它已经消失了。有人可以重新创建吗?

2 个答案:

答案 0 :(得分:0)

请注意,PRE_BUILD仅在Visual Studio 7 for other targets is just PRE_LINK中用作PRE_BUILD。

如果你需要在同一个源文件中使用两个编译器,只需从GCC编译add a dependency并链接到你正在使用的自定义目标,所以GCC在SYCL编译器之后执行。

答案 1 :(得分:0)

我可以想到其他两种方法。

  • 生成两个构建配置
  • 编写脚本以调用两个编译器

第一种方法可能是最简单的方法。您可能需要维护两个单独的CMakeLists.txt文件,或者可能只需参数化编译器和选项,并在生成(CC=gccCXX=g++CFLAGS / {{时将参数传递给Cmake 1}}等等......)您可以对底层构建系统(例如make)执行相同操作,然后只运行两次。

第二种方法有点复杂。编写一个简单的脚本,接受两组编译器选项,并按顺序使用编译器编译每个文件。然后可以将脚本配置为CXXFLAGS

因此,命令选项看起来像这样......

CC/CXX

我对SYCL不熟悉,所以我不知道它是如何正常使用的。