From 1e2bf7104c4dfcded1f41c2463bf7436fe512138 Mon Sep 17 00:00:00 2001 From: Chen Shuquan Date: Sat, 3 Mar 2018 00:36:19 +0800 Subject: [PATCH] 1. add *.vs *.fs *.gs into xcode project as source file 2. create symbolic link for *.vs *.fs *.gs: changes made in Xcode project for shader will come into effect while running the project --- CMakeLists.txt | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fbc0107..756acbe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -175,23 +175,32 @@ set(LIBS ${LIBS} STB_IMAGE) add_library(GLAD "src/glad.c") set(LIBS ${LIBS} GLAD) +macro(makeLink src dest target) + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${src} ${dest} DEPENDS ${dest} COMMENT "mklink ${src} -> ${dest}") +endmacro() + # then create a project file per tutorial foreach(CHAPTER ${CHAPTERS}) foreach(DEMO ${${CHAPTER}}) file(GLOB SOURCE "src/${CHAPTER}/${DEMO}/*.h" "src/${CHAPTER}/${DEMO}/*.cpp" + "src/${CHAPTER}/${DEMO}/*.vs" + "src/${CHAPTER}/${DEMO}/*.fs" + "src/${CHAPTER}/${DEMO}/*.gs" ) set(NAME "${CHAPTER}__${DEMO}") add_executable(${NAME} ${SOURCE}) target_link_libraries(${NAME} ${LIBS}) - if(WIN32) - set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}") - elseif(UNIX) + if(WIN32) + set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/bin/${CHAPTER}") + elseif(UNIX AND NOT APPLE) set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}") - set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}") + elseif(APPLE) + set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}") + set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}") set_target_properties(${NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}") - endif(WIN32) + endif(WIN32) # copy shader files to build directory file(GLOB SHADERS "src/${CHAPTER}/${DEMO}/*.vs" @@ -200,18 +209,21 @@ foreach(CHAPTER ${CHAPTERS}) "src/${CHAPTER}/${DEMO}/*.gs" ) foreach(SHADER ${SHADERS}) - if(WIN32) - # configure_file(${SHADER} "test") - add_custom_command(TARGET ${NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${SHADER} $) - elseif(UNIX) - file(COPY ${SHADER} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}) - endif(WIN32) - + if(WIN32) + # configure_file(${SHADER} "test") + add_custom_command(TARGET ${NAME} PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${SHADER} $) + elseif(UNIX AND NOT APPLE) + file(COPY ${SHADER} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}) + elseif(APPLE) + # create symbolic link for *.vs *.fs *.gs + get_filename_component(SHADERNAME ${SHADER} NAME) + makeLink(${SHADER} ${CMAKE_CURRENT_BINARY_DIR}/bin/${CHAPTER}/${SHADERNAME} ${NAME}) + endif(WIN32) endforeach(SHADER) - # if compiling for visual studio, also use configure file for each project (specifically to set up working directory) - if(MSVC) - configure_file(${CMAKE_SOURCE_DIR}/configuration/visualstudio.vcxproj.user.in ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.vcxproj.user @ONLY) - endif(MSVC) + # if compiling for visual studio, also use configure file for each project (specifically to set up working directory) + if(MSVC) + configure_file(${CMAKE_SOURCE_DIR}/configuration/visualstudio.vcxproj.user.in ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.vcxproj.user @ONLY) + endif(MSVC) endforeach(DEMO) endforeach(CHAPTER)