2016-04-07 3 views
2

をコピーCMakeのでビルドディレクトリにソースディレクトリからリソースをコピーする方法が最も簡単な方法は、しかし、これはビルドディレクトリ内のリソースを更新しCMakeの:(などGLSLシェーダなど)ソフトリンクリソースまたは各complilation

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

です私が電話するのはcmakeです。makeに電話する度に、リソースを更新するものが必要です。

など。今私はいくつかのGLSLシェーダーを開発しています。私は同時にC++コードとGLSLコードの両方を変更する必要がある、と私はすべては私が私のIDEでcompileまたはrunを打つたびに同期されている必要

簡単な解決策だろう(私はCMakeのによって生成されたプロジェクトファイルでコードブロックを使用します) ソフトリンクをソースディレクトリからビルドディレクトリにする必要があります。しかし、私は手動で(CMakeをバイパスして、プロジェクトをより壊れやすくする)、そうしたくありません。 CMakeは私のためにそれをすることができますか?


だけcompletnessのために、これはCMakeList.txt私の全体が

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

[この質問](http://stackoverflow.com/questions/28533760/cmake-only-copies-files-on-reload-not-build)にチェックを入れましたか?どちらの答えもあなたの目的に合っています。 – Tsyvarev

答えて

1

のようにあなたはあなたのバイナリtest_SphereShaderのための依存関係に変身あなたと一緒にカスタムターゲットを提供することができますどのように見えるかです:

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) 

カスタムターゲットを使用すると、コピーコマンドが含まれているスクリプトファイルCopyFile.cmakeで新しいCMakeインスタンスが呼び出されます。

この方法では、makeまたはmake test_SphereShaderが呼び出されるたびにファイルがコピーされます。手動でコピーすることもできますmake copy_shader_filesを呼び出すことです。

+0

申し訳ありませんが、私はそれを試した後に答えを受け入れることを忘れました...うまくいきます –