Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/testing/cmake/tools/TargetUtilities.cmake @ 9474

Last change on this file since 9474 was 9474, checked in by landauf, 11 years ago

moved settings for executables in visual studio to TargetUtilities to make them work for orxonox-main and test-executables
define test-executables with ORXONOX_ADD_EXECUTABLE

  • Property svn:eol-style set to native
File size: 18.0 KB
Line 
1 #
2 #             ORXONOX - the hottest 3D action shooter ever to exist
3 #                             > www.orxonox.net <
4 #
5 #        This program is free software; you can redistribute it and/or
6 #         modify it under the terms of the GNU General Public License
7 #        as published by the Free Software Foundation; either version 2
8 #            of the License, or (at your option) any later version.
9 #
10 #       This program is distributed in the hope that it will be useful,
11 #        but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #                 GNU General Public License for more details.
14 #
15 #   You should have received a copy of the GNU General Public License along
16 #      with this program; if not, write to the Free Software Foundation,
17 #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 #
19 #
20 #  Author:
21 #    Reto Grieder
22 #  Description:
23 #    Adds a library or an executable like ADD_LIBRARY/ADD_EXECUTABLE, but
24 #    accepts a lot more input information. Simply supply the keywords
25 #    described below in any order you wish.
26 #    The output is then stored in "_arg_ARGNAME" where ARGNAME is the the
27 #    name of the switch or list.
28 #
29 #    Switches: (when given --> TRUE, FALSE otherwise)
30 #      FIND_HEADER_FILES: Searches the current directory for all header files
31 #                         and adds them to the target.
32 #      EXCLUDE_FROM_ALL:  Inherited from ADD_LIBRARY/ADD_EXECUTABLE
33 #      ORXONOX_EXTERNAL:  Specify this for third party libraries
34 #      NO_DLL_INTERFACE:  Link statically with MSVC
35 #      NO_SOURCE_GROUPS:  Don't create msvc source groups
36 #      MODULE:            For dynamic module libraries (libraries only)
37 #      WIN32:             Inherited from ADD_EXECUTABLE (executables only)
38 #      PCH_NO_DEFAULT:    Do not make precompiled header files default if
39 #                         specified with PCH_FILE
40 #      NO_INSTALL:        Do not install the target at all
41 #      NO_VERSION:        Prevents adding any version to a target
42 #      NO_BUILD_UNITS:    Disables automatic (full) build units
43 #
44 #    Lists:
45 #      LINK_LIBRARIES:    Redirects to TARGET_LINK_LIBRARIES
46 #      LINK_LIBS_LINUX:   Redirects to TARGET_LINK_LIBRARIES only on Linux
47 #      LINK_LIBS_WIN32:   Redirects to TARGET_LINK_LIBRARIES only on Windows
48 #      LINK_LIBS_APPLE:   Redirects to TARGET_LINK_LIBRARIES only on Apple
49 #      LINK_LIBS_UNIX:    Redirects to TARGET_LINK_LIBRARIES only on UNIX
50 #      VERSION:           Set version to the binary
51 #      SOURCE_FILES:      Source files for the target
52 #      DEFINE_SYMBOL:     Sets the DEFINE_SYMBOL target property
53 #      TOLUA_FILES:       Files with tolua interface
54 #      PCH_FILE:          Precompiled header file
55 #      PCH_EXCLUDE:       Source files to be excluded from PCH support
56 #      OUTPUT_NAME:       If you want a different name than the target name
57 #      EXCLUDE_FROM_BUILD_UNITS: Specifies files that are not put into
58 #                         automatic (full) build units. They can still
59 #                         explicitely be included in a BUILD_UNIT (partial)
60 #  Note:
61 #    This function also installs the target!
62 #  Prerequisistes:
63 #    ORXONOX_DEFAULT_LINK
64 #  Parameters:
65 #    _target_name, ARGN for the macro arguments
66 #
67
68INCLUDE(BuildUnits)
69INCLUDE(CMakeDependentOption)
70INCLUDE(CapitaliseName)
71INCLUDE(GenerateToluaBindings)
72INCLUDE(ParseMacroArguments)
73INCLUDE(SourceFileUtilities)
74IF(PCH_COMPILER_SUPPORT)
75  INCLUDE(PrecompiledHeaderFiles)
76ENDIF()
77
78MACRO(ORXONOX_ADD_LIBRARY _target_name)
79  TU_ADD_TARGET(${_target_name} LIBRARY "MODULE" ${ARGN})
80ENDMACRO(ORXONOX_ADD_LIBRARY)
81
82MACRO(ORXONOX_ADD_EXECUTABLE _target_name)
83  TU_ADD_TARGET(${_target_name} EXECUTABLE "WIN32" ${ARGN})
84 
85  # When using Visual Studio we want to use the output directory as working
86  # directory and we also want to specify where the external dlls
87  # (lua, ogre, etc.) are. The problem hereby is that these information cannot
88  # be specified in CMake because they are not stored in the actual project file.
89  # This workaround will create a configured *.vcproj.user file that holds the
90  # right values. When starting the solution for the first time,
91  # these get written to the *vcproj.yourPCname.yourname.user
92  IF(MSVC)
93    IF(CMAKE_CL_64)
94      SET(MSVC_PLATFORM "x64")
95    ELSE()
96      SET(MSVC_PLATFORM "Win32")
97    ENDIF()
98    IF(MSVC10)
99      CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/src/template.vcxproj.user.in" "${CMAKE_CURRENT_BINARY_DIR}/${_target_name}.vcxproj.user")
100    ELSE()
101      STRING(REGEX REPLACE "^Visual Studio ([0-9][0-9]?).*$" "\\1"
102             VISUAL_STUDIO_VERSION_SIMPLE "${CMAKE_GENERATOR}")
103      CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/src/template.vcproj.user.in" "${CMAKE_CURRENT_BINARY_DIR}/${_target_name}.vcproj.user")
104    ENDIF()
105  ENDIF(MSVC)
106ENDMACRO(ORXONOX_ADD_EXECUTABLE)
107
108
109MACRO(TU_ADD_TARGET _target_name _target_type _additional_switches)
110  CAPITALISE_NAME(${_target_name} _target_name_capitalised)
111  STRING(TOUPPER "${_target_name}" _target_name_upper)
112
113  # Specify all possible options (either switch or with add. arguments)
114  SET(_switches   FIND_HEADER_FILES  EXCLUDE_FROM_ALL  ORXONOX_EXTERNAL
115                  NO_DLL_INTERFACE   NO_SOURCE_GROUPS  PCH_NO_DEFAULT 
116                  NO_INSTALL         NO_VERSION        NO_BUILD_UNITS
117                  ${_additional_switches})
118  SET(_list_names LINK_LIBRARIES     VERSION           SOURCE_FILES
119                  DEFINE_SYMBOL      TOLUA_FILES       PCH_FILE
120                  PCH_EXCLUDE        OUTPUT_NAME       LINK_LIBS_LINUX
121                  LINK_LIBS_WIN32    LINK_LIBS_APPLE   LINK_LIBS_UNIX
122                  EXCLUDE_FROM_BUILD_UNITS)
123
124  PARSE_MACRO_ARGUMENTS("${_switches}" "${_list_names}" ${ARGN})
125
126  # Process source files with support for build units
127  # Note: All file paths are relative to the root source directory, even the
128  #       name of the build unit.
129  SET(_${_target_name}_source_files)
130  SET(_get_build_unit_file FALSE)
131  SET(_add_to_build_unit FALSE)
132  FOREACH(_file ${_arg_SOURCE_FILES})
133    IF(_file STREQUAL "BUILD_UNIT")
134      # Next file is the name of the build unit
135      SET(_get_build_unit_file TRUE)
136    ELSEIF(_file STREQUAL "END_BUILD_UNIT")
137      IF(NOT _build_unit_file)
138        MESSAGE(FATAL_ERROR "No name provided for build unit")
139      ENDIF()
140      IF(ENABLE_BUILD_UNITS)
141        IF(NOT _build_unit_include_string)
142          MESSAGE(STATUS "Warning: Empty build unit!")
143        ENDIF()
144        IF(EXISTS ${_build_unit_file})
145          FILE(READ ${_build_unit_file} _include_string_file)
146        ENDIF()
147        IF(NOT _build_unit_include_string STREQUAL "${_include_string_file}")
148          FILE(WRITE ${_build_unit_file} "${_build_unit_include_string}")
149        ENDIF()
150        LIST(APPEND _${_target_name}_source_files ${_build_unit_file})
151        LIST(APPEND _${_target_name}_build_units ${_build_unit_file})
152        # Store the number of files included. May be used for full build units.
153        SET_SOURCE_FILES_PROPERTIES(${_build_unit_file}
154          PROPERTIES BUILD_UNIT_SIZE "${_build_unit_count}")
155      ENDIF()
156      SET(_add_to_build_unit FALSE)
157    ELSEIF(_get_build_unit_file)
158      # Note: ${_file} is relative to the binary directory
159      SET(_build_unit_file ${CMAKE_BINARY_DIR}/${_file})
160      SET(_get_build_unit_file FALSE)
161      SET(_add_to_build_unit TRUE)
162      SET(_build_unit_include_string)
163      SET(_build_unit_count "0")
164    ELSE()
165      # Default, add source file
166
167      # Prepare relative paths
168      IF(NOT _file MATCHES "^(.\\:|\\/)")
169        # Path can be relative to the current source directory if the file was
170        # not added with the source file macros. Otherwise there is a "./" at
171        # the beginning of each file and the filename is relative
172        # to the CMAKE_SOURCE_DIR
173        STRING(REGEX REPLACE "^\\.\\/(.+)$" "\\1" _temp ${_file})
174        IF(NOT ${_temp} STREQUAL ${_file})
175          SET(_file ${CMAKE_SOURCE_DIR}/${_temp})
176        ELSE()
177          SET(_file ${CMAKE_CURRENT_SOURCE_DIR}/${_file})
178        ENDIF()
179      ENDIF()
180
181      LIST(APPEND _${_target_name}_source_files ${_file})
182
183      # Handle build units
184      IF(_add_to_build_unit AND ENABLE_BUILD_UNITS)
185        IF(_file MATCHES "\\.(c|cc|cpp|cxx)$")
186          SET(_build_unit_include_string "${_build_unit_include_string}#include \"${_file}\"\n")
187          MATH(EXPR _build_unit_count "1 + ${_build_unit_count}")
188        ENDIF()
189        # Don't compile these files, even if they are source files
190        SET_SOURCE_FILES_PROPERTIES(${_file} PROPERTIES HEADER_FILE_ONLY TRUE)
191      ENDIF()
192    ENDIF()
193  ENDFOREACH(_file)
194
195  # Assemble all header files of the library
196  IF(_arg_FIND_HEADER_FILES)
197    GET_ALL_HEADER_FILES(_${_target_name}_header_files)
198  ENDIF()
199
200  # Combine source and header files
201  SET(_${_target_name}_files
202    ${_${_target_name}_header_files}
203    ${_${_target_name}_source_files}
204  )
205  # Remove potential duplicates
206  LIST(REMOVE_DUPLICATES _${_target_name}_files)
207
208  # TOLUA_FILES
209  IF(_arg_TOLUA_FILES)
210    GENERATE_TOLUA_BINDINGS(${_target_name_capitalised} _${_target_name}_files
211                            INPUTFILES ${_arg_TOLUA_FILES})
212    # Workaround for XCode: The folder where the bind files are written to has
213    # to be present beforehand.
214    IF(CMAKE_CONFIGURATION_TYPES)
215      FOREACH(_dir ${CMAKE_CONFIGURATION_TYPES})
216        FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${_dir})
217      ENDFOREACH(_dir)
218    ENDIF()
219  ENDIF()
220
221  # Mark files to be excluded from build units
222  IF(_arg_EXCLUDE_FROM_BUILD_UNITS)
223    SET_SOURCE_FILES_PROPERTIES(${_arg_EXCLUDE_FROM_BUILD_UNITS}
224      PROPERTIES EXCLUDE_FROM_BUILD_UNITS TRUE)
225  ENDIF()
226
227  # Full build units
228  IF(ENABLE_BUILD_UNITS AND NOT _arg_NO_BUILD_UNITS)
229    # Use full build units even in partial mode for externals
230    IF(ENABLE_BUILD_UNITS MATCHES "full" OR _arg_ORXONOX_EXTERNAL)
231      GENERATE_BUILD_UNITS(${_target_name} _${_target_name}_files)
232    ENDIF()
233  ENDIF()
234
235  # First part (pre target) of precompiled header files
236  IF(PCH_COMPILER_SUPPORT AND _arg_PCH_FILE)
237    # Provide convenient option to control PCH
238    IF(_arg_PCH_NO_DEFAULT)
239      SET(PCH_DEFAULT FALSE)
240    ELSE()
241      SET(PCH_DEFAULT TRUE)
242    ENDIF()
243    CMAKE_DEPENDENT_OPTION(PCH_ENABLE_${_target_name_upper}
244      "Enable using precompiled header files for library ${_target_name}." ${PCH_DEFAULT} PCH_ENABLE OFF)
245    # Almost never used individually, but produces a lot of options --> hide
246    MARK_AS_ADVANCED(PCH_ENABLE_${_target_name_upper})
247
248    IF(PCH_ENABLE_${_target_name_upper} AND NOT PCH_DISABLE_${_target_name})
249      PRECOMPILED_HEADER_FILES_PRE_TARGET(${_target_name} ${_arg_PCH_FILE} _${_target_name}_files EXCLUDE ${_arg_PCH_EXCLUDE})
250    ENDIF()
251  ENDIF()
252
253  # Generate the source groups
254  IF(MSVC AND NOT _arg_NO_SOURCE_GROUPS)
255    GENERATE_SOURCE_GROUPS(${_${_target_name}_files})
256
257    IF(NOT _arg_ORXONOX_EXTERNAL)
258      # Move the ...Prereqs.h and the PCH files to the 'Config' section
259      IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_target_name_capitalised}Prereqs.h)
260        SOURCE_GROUP("Config" FILES ${_target_name_capitalised}Prereqs.h)
261      ENDIF()
262      IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_arg_PCH_FILE})
263        SOURCE_GROUP("Config" FILES ${CMAKE_CURRENT_SOURCE_DIR}/${_arg_PCH_FILE})
264      ENDIF()
265    ENDIF()
266  ENDIF()
267
268  # Set link mode (SHARED/STATIC)
269  IF(MSVC AND _arg_NO_DLL_INTERFACE)
270    # Certain libraries don't have dllexport/dllimport and can't be linked shared with MSVC
271    SET(_link_mode STATIC)
272  ELSEIF(_arg_ORXONOX_EXTERNAL)
273    # Externals can be linked shared or statically
274    SET(_link_mode ${ORXONOX_EXTERNAL_LINK_MODE})
275  ELSE()
276    # All our own libraries are linked dynamically because of static symbols
277    SET(_link_mode SHARED)
278  ENDIF()
279
280  # No warnings needed from third party libraries
281  IF(_arg_ORXONOX_EXTERNAL)
282    REMOVE_COMPILER_FLAGS("-W3 -W4" MSVC)
283    ADD_COMPILER_FLAGS("-w" NOT MSVC)
284    ADD_COMPILER_FLAGS("-W0" MSVC)
285  ENDIF()
286
287  # Don't compile header files
288  FOREACH(_file ${_${_target_name}_files})
289    IF(NOT _file MATCHES "\\.(c|cc|cpp|cxx|mm)$")
290      SET_SOURCE_FILES_PROPERTIES(${_file} PROPERTIES HEADER_FILE_ONLY TRUE)
291    ENDIF()
292  ENDFOREACH(_file)
293
294
295
296  # Add the library/executable
297  IF("${_target_type}" STREQUAL "LIBRARY")
298    ADD_LIBRARY(${_target_name} ${_link_mode}
299                ${_arg_EXCLUDE_FROM_ALL} ${_${_target_name}_files})
300  ELSE()
301    ADD_EXECUTABLE(${_target_name} ${_arg_WIN32} ${_arg_EXCLUDE_FROM_ALL}
302                   ${_${_target_name}_files})
303  ENDIF()
304
305
306
307  # Change library prefix to "lib"
308  IF(MSVC AND ${_target_type} STREQUAL "LIBRARY")
309    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES
310      PREFIX "lib"
311    )
312  ENDIF()
313
314  # MSVC hack to exclude external library sources from the intellisense database
315  # (IntelliSense stops working when adding "-Zm1000" as compile flag. "/Zm1000"
316  # would not work because of the slash)
317  IF(_arg_ORXONOX_EXTERNAL AND MSVC)
318    GET_TARGET_PROPERTY(_compile_flags ${_target_name} COMPILE_FLAGS)
319    IF(NOT _compile_flags)
320      SET(_compile_flags)
321    ENDIF()
322    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES COMPILE_FLAGS "${_compile_flags} -Zm1000")
323  ENDIF()
324
325  # Configure modules
326  IF (_arg_MODULE)
327    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES
328      RUNTIME_OUTPUT_DIRECTORY ${CMAKE_MODULE_OUTPUT_DIRECTORY} # Windows
329      LIBRARY_OUTPUT_DIRECTORY ${CMAKE_MODULE_OUTPUT_DIRECTORY} # Unix
330    )
331    ADD_MODULE(${_target_name})
332    # Ensure that the main program depends on the module
333    SET(ORXONOX_MODULES ${ORXONOX_MODULES} ${_target_name} CACHE INTERNAL "")
334  ENDIF()
335
336  # Static library flags are not globally available
337  IF(ORXONOX_STATIC_LINKER_FLAGS)
338    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES STATIC_LIBRARY_FLAGS ${ORXONOX_STATIC_LINKER_FLAGS})
339  ENDIF()
340
341  # LINK_LIBRARIES
342  IF(_arg_LINK_LIBRARIES)
343    TARGET_LINK_LIBRARIES(${_target_name} ${_arg_LINK_LIBRARIES})
344  ENDIF()
345  IF(_arg_LINK_LIBS_LINUX AND LINUX)
346    TARGET_LINK_LIBRARIES(${_target_name} ${_arg_LINK_LIBS_LINUX})
347  ENDIF()
348  IF(_arg_LINK_LIBS_WIN32 AND WIN32)
349    TARGET_LINK_LIBRARIES(${_target_name} ${_arg_LINK_LIBS_WIN32})
350  ENDIF()
351  IF(_arg_LINK_LIBS_APPLE AND APPLE)
352    TARGET_LINK_LIBRARIES(${_target_name} ${_arg_LINK_LIBS_APPLE})
353  ENDIF()
354  IF(_arg_LINK_LIBS_UNIX AND UNIX)
355    TARGET_LINK_LIBRARIES(${_target_name} ${_arg_LINK_LIBS_UNIX})
356  ENDIF()
357
358  # Visual Leak Detector specific stuff (avoids the include)
359  IF(VISUAL_LEAK_DETECTOR_ENABLE)
360    TARGET_LINK_LIBRARIES(${_target_name} debug ${VLD_LIBRARY})
361  ENDIF()
362
363  # RPATH settings for the installation
364  IF("${_target_type}" STREQUAL "LIBRARY")
365    IF(_arg_MODULE)
366      SET(_rpath "${MODULE_RPATH}")
367    ELSE()
368      SET(_rpath "${LIBRARY_RPATH}")
369    ENDIF()
370  ELSE()
371    SET(_rpath "${RUNTIME_RPATH}")
372  ENDIF()
373  SET_TARGET_PROPERTIES(${_target_name} PROPERTIES INSTALL_RPATH "${_rpath}")
374
375  # DEFINE_SYMBOL
376  IF(_arg_DEFINE_SYMBOL)
377    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES DEFINE_SYMBOL ${_arg_DEFINE_SYMBOL})
378  ELSEIF(NOT _arg_ORXONOX_EXTERNAL)
379    # Automatically add the macro definitions for our own libraries
380    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES DEFINE_SYMBOL "${_target_name_upper}_SHARED_BUILD")
381  ENDIF()
382
383  # VERSION
384  IF(_arg_VERSION)
385    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES VERSION ${_arg_VERSION})
386  ELSEIF(NOT _arg_ORXONOX_EXTERNAL AND NOT _arg_NO_VERSION AND NOT ${_target_type} STREQUAL "EXECUTABLE")
387    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES VERSION ${ORXONOX_VERSION})
388  ENDIF()
389
390  # OUTPUT_NAME
391  IF(_arg_OUTPUT_NAME)
392    SET_TARGET_PROPERTIES(${_target_name} PROPERTIES OUTPUT_NAME  ${_arg_OUTPUT_NAME})
393  ENDIF()
394
395  # Second part of precompiled header files
396  IF(PCH_COMPILER_SUPPORT AND PCH_ENABLE_${_target_name_upper} AND _arg_PCH_FILE AND NOT PCH_DISABLE_${_target_name})
397    PRECOMPILED_HEADER_FILES_POST_TARGET(${_target_name} ${_arg_PCH_FILE})
398  ENDIF()
399
400  # Install all targets except for static ones (executables also have SHARED in _link_mode)
401  IF(${_link_mode} STREQUAL "SHARED" AND NOT _arg_NO_INSTALL)
402    IF(_arg_MODULE)
403      INSTALL(TARGETS ${_target_name}
404        RUNTIME DESTINATION ${MODULE_INSTALL_DIRECTORY}
405        LIBRARY DESTINATION ${MODULE_INSTALL_DIRECTORY}
406      )
407    ELSE()
408      INSTALL(TARGETS ${_target_name}
409        RUNTIME DESTINATION ${RUNTIME_INSTALL_DIRECTORY}
410        LIBRARY DESTINATION ${LIBRARY_INSTALL_DIRECTORY}
411      )
412    ENDIF()
413    IF(INSTALL_PDB_FILES) # MSVC specific: install debug symbols files
414      FOREACH(_config RelForDevs RelWithDebInfo)
415        GET_TARGET_PROPERTY(_location ${_target_name} LOCATION_${_config})
416        # Get absolute location without dll/exe extension
417        STRING(REGEX REPLACE "^(.+)\\.(dll|exe)$" "\\1" _location_we ${_location})
418        IF(_arg_MODULE)
419          INSTALL(FILES ${_location_we}.pdb
420            DESTINATION ${MODULE_INSTALL_DIRECTORY}
421            CONFIGURATIONS ${_config}
422          )
423        ELSE()
424          INSTALL(FILES ${_location_we}.pdb
425            DESTINATION ${RUNTIME_INSTALL_DIRECTORY}
426            CONFIGURATIONS ${_config}
427          )
428        ENDIF()
429      ENDFOREACH(_config)
430    ENDIF()
431  ENDIF()
432
433ENDMACRO(TU_ADD_TARGET)
434
435
436# Creates a helper file with name <name_of_the_library>${ORXONOX_MODULE_EXTENSION}
437# This helps finding dynamically loadable modules at runtime
438
439FUNCTION(ADD_MODULE _target)
440  # We use the properties to get the name because the librarys name may differ from
441  # the target name (for example orxonox <-> liborxonox)
442
443  GET_TARGET_PROPERTY(_target_loc ${_target} LOCATION)
444  GET_FILENAME_COMPONENT(_target_name ${_target_loc} NAME_WE)
445
446  IF(CMAKE_CONFIGURATION_TYPES)
447    FOREACH(_config ${CMAKE_CONFIGURATION_TYPES})
448      SET(_module_filename ${CMAKE_MODULE_OUTPUT_DIRECTORY}/${_config}/${_target_name}${ORXONOX_MODULE_EXTENSION})
449
450      FILE(WRITE ${_module_filename})
451
452      INSTALL(
453        FILES ${_module_filename}
454        DESTINATION ${MODULE_INSTALL_DIRECTORY}
455        CONFIGURATIONS ${_config}
456      )
457    ENDFOREACH()
458  ELSE()
459    SET(_module_filename ${CMAKE_MODULE_OUTPUT_DIRECTORY}/${_target_name}${ORXONOX_MODULE_EXTENSION})
460
461    FILE(WRITE ${_module_filename})
462
463    INSTALL(
464      FILES ${_module_filename}
465      DESTINATION ${MODULE_INSTALL_DIRECTORY}
466    )
467  ENDIF()
468ENDFUNCTION(ADD_MODULE)
Note: See TracBrowser for help on using the repository browser.