我如何配置cmake编译一个文件两次与两个不同的编译器
How can I configure cmake to compile a file twice with two different compilers?
我将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,所以我不知道它通常是如何使用的。
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- *char数组到字符串(两次运行代码和两个不同的结果)
- 两个单链列表共享同一个节点和析构函数两次删除相同的内存
- 为什么当我在同一内存中各有两个指针时,我必须调用"delete"两次?
- 为什么我的单例实现两次启动?(一个进程,多个线程)
- 如何循环两次,将不同的值插入两个不同的堆栈
- 两次声明纯虚拟函数(在层次结构中的两个类中)是否完全合法
- c++将输出(数字)保存到一个数组中.一次两个数字
- Boost接受器每次接受两次输入连接,并生成两个线程
- C/C++如何在回车后从stdin中读取,连续命中两次或在两个换行后
- 对于在同一地址构造两次的对象,编译器如何知道必须调用第二个析构函数
- 在链接两个对象文件时,使用#ifndef防止定义一个函数两次
- 我如何配置cmake编译一个文件两次与两个不同的编译器
- 一次两个字符串算法
- 我如何打印4个不同字母组合成2个字母对的所有方式来填充4个位置,每个字母正好出现两次