如何使用CMake构建ispc文件?

3

我有一个简单的项目。它包含两个文件:

main.c
kernel.ispc

(ispc文件是https://ispc.github.io/的源代码)

要手动编译文件,我只需使用:

ispc --target=sse2 kernel.ispc -o kernel.o
gcc -c main.c -o main.o
gcc main.o kernel.o -o my_program

因此,对于我的CMake文件,它最初看起来应该是这样的。
project(my_program)
add_executable(my_program main.c)

当然,它链接不起来,因为缺少在kernel.o中的符号。
所以问题是: 如何让cmake使用ispc编译器来编译kernel.ispc,并将其链接到my_program中?

add_custom_command有什么问题? - Tsyvarev
1)我找不到一个展示如何在这种情况下使用自定义命令的例子。 2)接下来,我该如何使可执行文件依赖并在链接时使用那些.o文件? - JodiTheTigger
2个回答

5
我该如何使用cmake编译kernel.ispc并使用ispc编译器?只需使用add_custom_command即可。
add_custom_command(OUTPUT kernel.o
                   COMMAND ispc --target=sse2 ${CMAKE_SOURCE_DIR}/kernel.ispc -o kernel.o
                   DEPENDS kernel.ispc)

我该如何让cmake将它链接到my_program中呢?

从CMake的角度来看,.o文件只是可执行文件的另一种源文件:

add_executable(my_program main.c kernel.o)

没错,可以这样做。只需要将命令行更改为:COMMAND ispc --target=sse2 ${CMAKE_SOURCE_DIR}\kernel.ispc -o kernel.o,否则它找不到文件。 - JodiTheTigger
是的,COMMAND在二进制目录中执行,这就是为什么它无法在源目录中找到文件。我已经修复了答案。 - Tsyvarev

0

我知道这是一个老问题,但是CMAKE 3.19现在已经内置了对ISPC的支持。


1
有没有示例? - Jinesi Yelizati
这可能是最好的资源-他指出了3.19对ISPC支持存在的一些问题。我不使用CMAKE,我使用Premake。但我会问问其他人是否使用过cmake支持。我认为我们可能会在编译器中使用它来构建示例。https://risaksson.com/post/1/2022-04-15/ISPC-and-Integrating-ISPC-Into-CMake-Projects - pbrubaker
顺便说一句,如果您想更快地联系我们,请在 Twitter 上给 @pbruabker 或 @ispc_updates 发消息。 - pbrubaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接