2017-02-14 7 views
0

У меня есть простой проект. Он содержит два файла:Как использовать CMake для создания файла ispc?

main.c 
kernel.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 это будет выглядеть intially выглядят как

project(my_program) 
add_executable(my_program main.c) 

но, разумеется, он не свяжется, так как ему не хватает символов t Шляпа в kernel.o

Так что вопрос: Как получить CMake для компиляции kernel.ispc с помощью ispc компилятора, и как я могу получить CMake, чтобы затем связать его в my_program?

+0

Что случилось с [add_custom_command] (https://cmake.org/cmake/help/v3.7/command /add_custom_command.html)? – Tsyvarev

+0

Я не могу найти пример, который показывает, как использовать его для этого случая. 1) Как использовать пользовательскую команду для сборки любого файла ispc в .o-файле? 2) как я могу заставить исполняемый файл зависеть и использовать эти .o-файлы при связывании? – JodiTheTigger

ответ

2

Как получить 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) 
+0

Yup, это работает. Просто нужно изменить командную строку на: 'COMMAND ispc -target = sse2 $ {CMAKE_SOURCE_DIR} \ kernel.ispc -o kernel.o', поскольку он не находит файл в противном случае. – JodiTheTigger

+0

Да, COMMAND выполняется в двоичном каталоге, поэтому он не может найти файл в исходном каталоге. Я исправил ответ. – Tsyvarev