2016-04-07 39 views
2

CMake ile inşa dizine kaynak dizinden kopyalama kaynakları nasıl en basit yolu ancakCKağıt: (örneğin GLSL shader gibi) softlink kaynak ya da her complilation

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

kopyalasanız, bu yapı dizinde kaynakları günceller Sadececmake'u aradığımda.make'u her aradığımda kaynakları güncelleyen bir şeye ihtiyacım var.

E.g. şimdi bazı GLSL gölgelendiricileri geliştiriyorum. Ben aynı anda C++ kod ve GLSL kodunu hem değiştirmek gerekiyor ve ben herşey benim IDE içindecompile veya run vurmak her zaman senkronize edilir ihtiyaç

basit bir çözüm olur (ben CMake tarafından oluşturulan proje dosyaları ile codeblocks kullanın) dizin oluşturmak için kaynak dizinden softlink yapmak. Ama bunu manuel olarak yapmak istemiyorum (CMake'i geçmek ve projeyi daha kırılgan hale getirecekti). CMake benim için yapabilir mi? Sadece tamlanışını için


, bunun ne kadar benim bütün size ikili test_SphereShader için bir bağımlılık dönüşebilir ile

# ==== 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

sen [bu soruyu] kontrol ettiniz (http://stackoverflow.com/questions/28533760/cmake-only-copies-files-on-reload-not-build)? Her iki cevabı da amacınıza uygun. – Tsyvarev

cevap

1

Özel bir hedef sağlayabilir gibi CMakeList.txt görünür:

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) 

Özel hedefi kullanmak, kopya komutunuzu içeren bir CopyFile.cmake komut dosyasıyla yeni bir CMake örneğini çağırır:

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

dosya make veya make test_SphereShader çağrılır her zaman kopyalanır Bu şekilde. Manuel olarak make copy_shader_files numaralı telefonu arayarak kopyalayabilirsiniz.

+0

Üzgünüm, denedikten sonra cevabı kabul etmeyi unuttum ... iyi çalışıyor –