The simplest way how to copy resources from source directory into build directory with CMake is
file( COPY ${CMAKE_CURRENT_SOURCE_DIR}/resources DESTINATION ${CMAKE_CURRENT_BINARY_DIR} )
however, this updates the resources in build directory only when I call cmake
. I need something which update resources each time I call make
.
E.g. now I develop some GLSL shaders. I need to change simultaneously both the C++ code and GLSL code, and I need everything is synchronized each time I hit compile
or run
in my IDE ( I use CodeBlocks with project files generated by CMake )
The simple solution would be to make softlink from source directory to build directory. But I don't want to do it manually (it would be by-passing of CMake and would make project more fragile ). Can CMake do it for me ?
just for completness, this is how my whole CMakeList.txt
looks like
# ==== 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} )
You can provide a custom target with you turn into a dependency for your binary 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 )
Using the custom target invokes a new CMake instance with a script file CopyFile.cmake
which contains your copy command:
file( COPY ${CMAKE_CURRENT_SOURCE_DIR}/shaders DESTINATION ${CMAKE_CURRENT_BINARY_DIR} )
This way the file is copied every time make
or make test_SphereShader
is invoked. You can even copy manually be calling make copy_shader_files
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With