【问题标题】:How can I configure cmake to compile a file twice with two different compilers?如何配置 cmake 以使用两个不同的编译器编译文件两次?
【发布时间】:2015-10-21 15:25:36
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ parallel-processing cmake opencl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

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

      不过我对SYCL不熟悉,所以不知道它平时是怎么用的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 1970-01-01
        • 2019-03-15
        • 2018-11-13
        • 2017-12-29
        • 2020-08-13
        • 2019-07-12
        相关资源
        最近更新 更多