瀏覽代碼

Use CTK_PLUGIN_<type>_OUTPUT_DIRECTORY vars for customization.

Using these CMake variables allows to control the output directories
for CTK plug-ins.
Sascha Zelzer 13 年之前
父節點
當前提交
bad741f92a

+ 28 - 18
CMake/ctkMacroBuildPlugin.cmake

@@ -256,25 +256,34 @@ MACRO(ctkMacroBuildPlugin)
 
 
   # Set the output directory for the plugin
   # Set the output directory for the plugin
   IF(MY_OUTPUT_DIR)
   IF(MY_OUTPUT_DIR)
-    SET(output_dir_suffix ${MY_OUTPUT_DIR})
+    SET(output_dir_suffix "/${MY_OUTPUT_DIR}")
   ELSE()
   ELSE()
-    SET(output_dir_suffix "plugins")
+    SET(output_dir_suffix "")
   ENDIF()
   ENDIF()
 
 
-  IF(MY_TEST_PLUGIN)
-    SET(output_dir_suffix "test_${output_dir_suffix}")
-  ENDIF()
-
-  IF(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
-    SET(runtime_output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-  ELSE()
-    SET(runtime_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-  ENDIF()
-  IF(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
-    SET(library_output_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-  ELSE()
-    SET(library_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-  ENDIF()
+  FOREACH(type RUNTIME LIBRARY ARCHIVE)
+    IF(NOT DEFINED CTK_PLUGIN_${type}_OUTPUT_DIRECTORY AND CMAKE_${type}_OUTPUT_DIRECTORY)
+      # Put plug-ins by default into a "plugins" subdirectory
+      SET(CTK_PLUGIN_${type}_OUTPUT_DIRECTORY "${CMAKE_${type}_OUTPUT_DIRECTORY}/plugins")
+    ENDIF()
+    
+    IF(IS_ABSOLUTE "${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}")
+      SET(plugin_${type}_output_dir "${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}${output_dir_suffix}")
+    ELSEIF(CMAKE_${type}_OUTPUT_DIRECTORY)
+      SET(plugin_${type}_output_dir "${CMAKE_${type}_OUTPUT_DIRECTORY}/${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}${output_dir_suffix}")
+    ELSE()
+      SET(plugin_${type}_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${CTK_PLUGIN_${type}_OUTPUT_DIRECTORY}${output_dir_suffix}")
+    ENDIF()
+
+    IF(MY_TEST_PLUGIN)
+      # Test plug-ins will always be put in a separate directory
+      IF(CMAKE_${type}_OUTPUT_DIRECTORY)
+        SET(plugin_${type}_output_dir "${CMAKE_${type}_OUTPUT_DIRECTORY}/test_plugins")
+      ELSE()
+        SET(plugin_${type}_output_dir "${PROJECT_BINARY_DIR}/test_plugins")
+      ENDIF()
+    ENDIF()
+  ENDFOREACH()
 
 
   SET(plugin_compile_flags "-DQT_PLUGIN")
   SET(plugin_compile_flags "-DQT_PLUGIN")
 
 
@@ -295,8 +304,9 @@ MACRO(ctkMacroBuildPlugin)
   # Apply properties to the library target.
   # Apply properties to the library target.
   SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
   SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
     COMPILE_FLAGS "${plugin_compile_flags}"
     COMPILE_FLAGS "${plugin_compile_flags}"
-    RUNTIME_OUTPUT_DIRECTORY ${runtime_output_dir}
-    LIBRARY_OUTPUT_DIRECTORY ${library_output_dir}
+    RUNTIME_OUTPUT_DIRECTORY ${plugin_RUNTIME_output_dir}
+    LIBRARY_OUTPUT_DIRECTORY ${plugin_LIBRARY_output_dir}
+    ARCHIVE_OUTPUT_DIRECTORY ${plugin_ARCHIVE_output_dir}
     PREFIX "lib"
     PREFIX "lib"
     )
     )
 
 

+ 3 - 0
CMakeLists.txt

@@ -108,6 +108,9 @@ FOREACH(type LIBRARY RUNTIME ARCHIVE)
     ENDIF()
     ENDIF()
   ENDIF()
   ENDIF()
   SET(CMAKE_${type}_OUTPUT_DIRECTORY ${output_dir} CACHE INTERNAL "Single output directory for building all libraries.")
   SET(CMAKE_${type}_OUTPUT_DIRECTORY ${output_dir} CACHE INTERNAL "Single output directory for building all libraries.")
+  IF(NOT DEFINED CTK_PLUGIN_${type}_OUTPUT_DIRECTORY)
+    SET(CTK_PLUGIN_${type}_OUTPUT_DIRECTORY ${CMAKE_${type}_OUTPUT_DIRECTORY})
+  ENDIF()
 ENDFOREACH()
 ENDFOREACH()
 
 
 #-----------------------------------------------------------------------------
 #-----------------------------------------------------------------------------

+ 3 - 15
Libs/PluginFramework/Testing/FrameworkTestPlugins/pluginD_test/CMakeLists.txt

@@ -13,23 +13,11 @@ INCLUDE(${QT_USE_FILE})
 ADD_LIBRARY(${lib_name} SHARED ${PLUGIN_SRCS})
 ADD_LIBRARY(${lib_name} SHARED ${PLUGIN_SRCS})
 TARGET_LINK_LIBRARIES(${lib_name} ${QT_LIBRARIES})
 TARGET_LINK_LIBRARIES(${lib_name} ${QT_LIBRARIES})
 
 
-# Set the output directory for the plugin
-SET(output_dir_suffix "test_plugins")
-IF(CMAKE_RUNTIME_OUTPUT_DIRECTORY)
-  SET(runtime_output_dir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-ELSE()
-  SET(runtime_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-ENDIF()
-IF(CMAKE_LIBRARY_OUTPUT_DIRECTORY)
-  SET(library_output_dir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${output_dir_suffix}")
-ELSE()
-  SET(library_output_dir "${CMAKE_CURRENT_BINARY_DIR}/${output_dir_suffix}")
-ENDIF()
-
 # Apply properties to the library target.
 # Apply properties to the library target.
 SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
 SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
 #    COMPILE_FLAGS "-DQT_PLUGIN"
 #    COMPILE_FLAGS "-DQT_PLUGIN"
-    RUNTIME_OUTPUT_DIRECTORY ${runtime_output_dir}
-    LIBRARY_OUTPUT_DIRECTORY ${library_output_dir}
+    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/test_plugins
+    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/test_plugins
+    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/test_plugins
     PREFIX "lib"
     PREFIX "lib"
     )
     )

+ 16 - 0
Utilities/LastConfigureStep/CTKGenerateCTKConfig.cmake

@@ -105,6 +105,22 @@ SET(CTK_INCLUDE_DIRS_CONFIG
 # Library directory.
 # Library directory.
 SET(CTK_LIBRARY_DIRS_CONFIG ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
 SET(CTK_LIBRARY_DIRS_CONFIG ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
 
 
+# Plug-in output directory
+IF(WIN32)
+  SET(_plugin_output_type "RUNTIME")
+ELSE()
+  SET(_plugin_output_type "LIBRARY")
+ENDIF()
+IF(DEFINED CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY)
+  IF(IS_ABSOLUTE "${CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY}")
+    SET(CTK_PLUGIN_LIBRARIES_DIR_CONFIG "${CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY}")
+  ELSE()
+    SET(CTK_PLUGIN_LIBRARIES_DIR_CONFIG "${CMAKE_${_plugin_output_type}_OUTPUT_DIRECTORY}/${CTK_PLUGIN_${_plugin_output_type}_OUTPUT_DIRECTORY}")
+  ENDIF()
+ELSE()
+  SET(CTK_PLUGIN_LIBRARIES_DIR_CONFIG "${CMAKE_${_plugin_output_type}_OUTPUT_DIRECTORY}/plugins")
+ENDIF()
+
 # External project libraries.
 # External project libraries.
 SET(CTK_EXTERNAL_LIBRARIES_CONFIG ${CTK_EXTERNAL_LIBRARIES})
 SET(CTK_EXTERNAL_LIBRARIES_CONFIG ${CTK_EXTERNAL_LIBRARIES})
 
 

+ 1 - 1
ctkConfig.h.in

@@ -1,7 +1,7 @@
 #ifndef __ctkConfig_h
 #ifndef __ctkConfig_h
 #define __ctkConfig_h
 #define __ctkConfig_h
 
 
-#define CTK_PLUGIN_DIR "@CTK_BINARY_DIR@/bin/plugins/"
+#define CTK_PLUGIN_DIR "@CTK_PLUGIN_LIBRARIES_DIR_CONFIG@/"
 
 
 #endif
 #endif