2016-04-07 4 views
2

Die einfachste Art und Weise kopieren, wie mit CMakeCMake: Softlink Ressource (wie GLSL Shadern) oder jede Compilation

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 

jedoch Ressourcen aus Quellverzeichnis in Build-Verzeichnis zu kopieren, aktualisieren diese die Ressourcen in Build-Verzeichnis nur wenn Ich rufe cmake. Ich brauche etwas, die Ressourcen aktualisieren jedes Mal, wenn ichmake anrufen.

z. Jetzt entwickle ich einige GLSL-Shader. Ich muß gleichzeitig den C sowohl ++ Code und GLSL-Code ändern, und ich brauche alles jedes Mal, wenn ich getroffen synchronisiert istcompile oder run in meiner IDE (ich benutze Codeblocks mit Projektdateien, die von CMake)

Die einfache Lösung würde sei zu machen softlink von Quellverzeichnis zu Build-Verzeichnis. Aber ich möchte es nicht manuell machen (es würde CMake umgehen und würde das Projekt fragiler machen). Kann CMake es für mich tun?


nur für Vollständigkeit, das ist, wie meine ganze CMakeList.txt sieht aus wie

# ==== common header 

cmake_minimum_required (VERSION 2.8) 
project (SimpleSimulationEngine) 

if(UNIX) 
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++0x") 
endif() 

SET(AXULIARY_COMPILE_FLAGS "-w -O2") 
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${AXULIARY_COMPILE_FLAGS}") 
SET(COMMON_SRCS "${CMAKE_SOURCE_DIR}/common") 
include_directories(
     ${COMMON_SRCS} 
     ${COMMON_SRCS}/algorithms 
     ${COMMON_SRCS}/math 
     ${COMMON_SRCS}/SDL2OGL3 
) 

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake_utils) 

find_package(OpenGL REQUIRED) 
find_package(GLEW REQUIRED) 
find_package(GLU REQUIRED) 
find_package(SDL2 REQUIRED) 

# ==== Particular build target 

add_executable  (test_SphereShader test_SphereShader.cpp) 
target_link_libraries(test_SphereShader ${OpenGL_LIBRARY} ${GLU_LIBRARY} ${GLEW_LIBRARY} ${SDL2_LIBRARY}) 
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/shaders DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 
+0

Haben Sie [diese Frage] überprüft (http://stackoverflow.com/questions/28533760/cmake-only-copies-files-on-reload-not-build)? Beide Antworten sind für Ihren Zweck geeignet. – Tsyvarev

Antwort

1

Sie eine benutzerdefinierte Ziel zur Verfügung stellen kann, mit Ihnen in eine Abhängigkeit für die Binärdatei test_SphereShader drehen:

ADD_CUSTOM_TARGET(
     copy_shader_files 
     ${CMAKE_COMMAND} 
     -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} 
     -D DESTINATION_DIR=${CMAKE_CURRENT_BINARY_DIR} 
     -P CopyFile.cmake 
     COMMENT "Copying Files for target: test_SphereShader" VERBATIM 
     ) 

ADD_DEPENDENCIES (test_SphereShader copy_shader_files) 

Wenn Sie das benutzerdefinierte Ziel verwenden, wird eine neue CMake-Instanz mit einer Skriptdatei CopyFile.cmake aufgerufen, die Ihren Kopierbefehl enthält:

file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/shaders DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) 

diese Weise wird die Datei jedes Mal make oder make test_SphereShader kopiert wird, wird aufgerufen. Sie können sogar manuell kopieren make copy_shader_files anrufen.

+0

Entschuldigung, ich habe vergessen, die Antwort zu akzeptieren, nachdem ich es versucht habe ... funktioniert gut –