Browse Source

Determine the relative path to the CoreData and Data directories correctly for symlink creation, regardless of main executable target location in project source tree.

Wei Tjong Yao 12 years ago
parent
commit
478ace41cc
2 changed files with 17 additions and 13 deletions
  1. 11 7
      Source/CMake/Modules/Urho3D-CMake-magic.cmake
  2. 6 6
      Source/Engine/CMakeLists.txt

+ 11 - 7
Source/CMake/Modules/Urho3D-CMake-magic.cmake

@@ -180,6 +180,9 @@ endif ()
 # Include CMake builtin module for building shared library support
 include (GenerateExportHeader)
 
+# Determine the project root directory
+get_filename_component (PROJECT_ROOT_DIR ${PROJECT_SOURCE_DIR} PATH)
+
 # Override builtin macro and function to suit our need, always generate header file regardless of target type...
 macro (_DO_SET_MACRO_VALUES TARGET_LIBRARY)
     set (DEFINE_DEPRECATED)
@@ -319,21 +322,21 @@ macro (setup_executable)
     setup_target ()
     if (MSVC)
         add_custom_command (TARGET ${TARGET_NAME} POST_BUILD
-            COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETPATH)\" \"${PROJECT_SOURCE_DIR}/../Bin\"
-            COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETDIR)$(TARGETNAME).pdb\" \"${PROJECT_SOURCE_DIR}/../Bin\"
+            COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETPATH)\" \"${PROJECT_ROOT_DIR}/Bin\"
+            COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETDIR)$(TARGETNAME).pdb\" \"${PROJECT_ROOT_DIR}/Bin\"
             COMMENT "Copying executable and debug files to Bin directory")
     elseif (IOS)
         set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2")
     else ()
         get_target_property (EXECUTABLE_NAME ${TARGET_NAME} LOCATION)
         if (CMAKE_CROSSCOMPILING)
-            file (MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/../Bin-CC)
-            add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${EXECUTABLE_NAME} ${PROJECT_SOURCE_DIR}/../Bin-CC)
+            file (MAKE_DIRECTORY ${PROJECT_ROOT_DIR}/Bin-CC)
+            add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${EXECUTABLE_NAME} ${PROJECT_ROOT_DIR}/Bin-CC)
             if (SCP_TO_TARGET)
                 add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND scp ${EXECUTABLE_NAME} ${SCP_TO_TARGET} || exit 0)
             endif ()
         else ()
-            add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${EXECUTABLE_NAME} ${PROJECT_SOURCE_DIR}/../Bin)
+            add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${EXECUTABLE_NAME} ${PROJECT_ROOT_DIR}/Bin)
         endif ()
     endif ()
 endmacro ()
@@ -352,7 +355,7 @@ endmacro ()
 macro (setup_main_executable)
     # Define resource files
     if (APPLE)
-        set (RESOURCE_FILES ${PROJECT_SOURCE_DIR}/../Bin/CoreData ${PROJECT_SOURCE_DIR}/../Bin/Data)
+        set (RESOURCE_FILES ${PROJECT_ROOT_DIR}/Bin/CoreData ${PROJECT_ROOT_DIR}/Bin/Data)
         set_source_files_properties(${RESOURCE_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
         set (SOURCE_FILES ${SOURCE_FILES} ${RESOURCE_FILES})
     endif ()
@@ -393,8 +396,9 @@ macro (setup_main_executable)
         else ()
             # Create symbolic links to allow debugging/running the main executable within Xcode itself
             get_filename_component (PATH ${TARGET_LOC} PATH)
+            file (RELATIVE_PATH REL_PATH ${PATH} ${PROJECT_ROOT_DIR}/Bin)
             add_custom_command (TARGET ${TARGET_NAME} POST_BUILD
-                COMMAND for dir in CoreData Data\; do cmake -E create_symlink ../../../../Bin/$$dir ${PATH}/$$dir\; done
+                COMMAND for dir in CoreData Data\; do cmake -E create_symlink ${REL_PATH}/$$dir ${PATH}/$$dir\; done
                 COMMENT "Create symbolic links to allow debugging/running the main executable within Xcode itself")
         endif ()
     endif ()

+ 6 - 6
Source/Engine/CMakeLists.txt

@@ -112,21 +112,21 @@ if (APPLE AND LIB_TYPE STREQUAL SHARED)
 endif ()
 
 # Define post build steps
-file (MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/../Lib)
+file (MAKE_DIRECTORY ${PROJECT_ROOT_DIR}/Lib)
 if (MSVC)
     add_custom_command (TARGET ${TARGET_NAME} POST_BUILD
-        COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETPATH)\" \"${PROJECT_SOURCE_DIR}/../Lib\"
-        COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETDIR)$(TARGETNAME).pdb\" \"${PROJECT_SOURCE_DIR}/../Lib\"
+        COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETPATH)\" \"${PROJECT_ROOT_DIR}/Lib\"
+        COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different \"$(TARGETDIR)$(TARGETNAME).pdb\" \"${PROJECT_ROOT_DIR}/Lib\"
         COMMENT "Copying library and debug files to Lib directory")
 else ()
     get_target_property (LOCATION ${TARGET_NAME} LOCATION)
     if (CMAKE_CROSSCOMPILING)
-        file (MAKE_DIRECTORY ${PROJECT_SOURCE_DIR}/../Lib-CC)
-        add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${LOCATION} ${PROJECT_SOURCE_DIR}/../Lib-CC)
+        file (MAKE_DIRECTORY ${PROJECT_ROOT_DIR}/Lib-CC)
+        add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${LOCATION} ${PROJECT_ROOT_DIR}/Lib-CC)
         if (SCP_TO_TARGET)
             add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND scp ${LOCATION} ${SCP_TO_TARGET} || exit 0)
         endif ()
     else ()   
-        add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${LOCATION} ${PROJECT_SOURCE_DIR}/../Lib)
+        add_custom_command (TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${LOCATION} ${PROJECT_ROOT_DIR}/Lib)
     endif ()
 endif ()