我正在将一个SYCL / OpenCL内核添加到使用cmake构建的并行C ++程序中。使用SYCL意味着我需要让cmake编译我的C ++源文件两次:一次使用SYCL编译器,一次使用项目的默认编译器,即GCC。两种编辑都产生了在链接时需要包含的输出。
我对cmake完全不熟悉。我已经将GCC编译和链接步骤添加到项目的CMakeLists.txt中,但是添加SYCL编译步骤的最佳方法是什么?我正在尝试使用“PRE_BUILD”的“add_custom_command”选项,但运行的命令似乎不知道提供给正常编译和链接步骤的路径:当前工作目录,包括目录,源目录等我必须手动指定所有这些,我必须先把它们中的一些弄清楚。
感觉我正在努力做到这一点。是否有推荐(或至少更好)的方法让cmake用两个不同的编译器编译文件两次?
此外,曾经有一个SYCL标签,但它已经消失了。有人可以重新创建吗?
答案 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=gcc
,CXX=g++
,CFLAGS
/ {{时将参数传递给Cmake 1}}等等......)您可以对底层构建系统(例如make)执行相同操作,然后只运行两次。
第二种方法有点复杂。编写一个简单的脚本,接受两组编译器选项,并按顺序使用编译器编译每个文件。然后可以将脚本配置为CXXFLAGS
。
因此,命令选项看起来像这样......
CC/CXX
我对SYCL不熟悉,所以我不知道它是如何正常使用的。