2017-02-14 4 views
0

Ich habe ein einfaches Projekt. Es enthält zwei Dateien:Wie verwende ich CMake, um eine ispc-Datei zu erstellen?

main.c 
kernel.ispc 

(ispc Dateien sind Quelle für https://ispc.github.io/)

manuell Um die Datei zu kompilieren ich nur verwenden würde:

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

Also für meine Cmake Datei würde es aussehen intially aussehen wie

project(my_program) 
add_executable(my_program main.c) 

aber natürlich wird es nicht verknüpfen, wie es Symbole fehlt t Hut ist in kernel.o

Die Frage ist also: Wie erhalte ich Cmake kernel.ispc die ispc-Compiler zu kompilieren, und wie bekomme ich Cmake dann verknüpfen in my_program?

+0

Was mit [add_custom_command] (https://cmake.org/cmake/help/v3.7/command falsch ist /add_custom_command.html)? – Tsyvarev

+0

Ich kann kein Beispiel finden, das zeigt, wie man es für diesen Fall benutzt. 1) Wie verwende ich den benutzerdefinierten Befehl, um eine ISPC-Datei in eine O-Datei zu erstellen? 2) Wie mache ich dann die ausführbare Datei abhängig und verwenden diese .o-Dateien beim Verlinken? – JodiTheTigger

Antwort

2

Wie bekomme ich cmake kompilieren kernel.ispc mit dem Compiler ispc?

Nur add_custom_command verwenden:

add_custom_command(OUTPUT kernel.o 
        COMMAND ispc --target=sse2 ${CMAKE_SOURCE_DIR}/kernel.ispc -o kernel.o 
        DEPENDS kernel.ispc) 

Wie bekomme ich Cmake dann zu verknüpfen in my_program?

Aus CMake Sicht sind .o Dateien nur eine weitere Quellen für ausführbare:

add_executable(my_program main.c kernel.o) 
+0

Yup, das funktioniert. Sie müssen nur die Befehlszeile ändern in: 'COMMAND ispc --target = sse2 $ {CMAKE_SOURCE_DIR} \ kernel.ispc -o kernel.o', da die Datei sonst nicht gefunden wird. – JodiTheTigger

+0

Ja, das COMMAND wird im Binärverzeichnis ausgeführt, deshalb kann die Datei im Quellverzeichnis nicht gefunden werden. Ich habe die Antwort behoben. – Tsyvarev

Verwandte Themen