我如何配置cmake编译一个文件两次与两个不同的编译器

How can I configure cmake to compile a file twice with two different compilers?

本文关键字:两次 两个 编译器 文件 cmake 何配置 配置 编译 一个      更新时间:2023-10-16

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

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

感觉我做这件事很艰难。有没有推荐的(或者至少更好的)方法让cmake用两个不同的编译器编译一个文件两次?

还有,曾经有一个SYCL标签,但它消失了。有人能重做一下吗?

请注意,PRE_BUILD只在Visual Studio 7中作为PRE_BUILD工作,对于其他目标只是PRE_LINK。

如果您需要在同一个源文件上使用两个编译器,只需从GCC编译器中添加一个依赖项并链接到您正在使用的自定义目标,这样GCC就会在SYCL编译器之后执行。

我可以想到几个其他的方法。

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

第一种方法可能是最简单的。您可能需要维护两个单独的CMakeLists.txt文件,或者可能只是参数化编译器和选项,并在生成(CC=gcc, CXX=g++, CFLAGS/CXXFLAGS等…)时将它们的参数传递给Cmake。你也许可以对底层构建系统(例如make)做同样的事情,并且只运行两次。

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

所以,命令选项看起来像这样…

--cc1 sycl --cc2 gcc --cc1opts ... --cc2opts ...

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

相关文章: