view CMakeLists.txt @ 18:f9fb659509e1

Doxygen docs for Vector classes.
author Eris Caffee <discordia@eldalin.com>
date Mon, 27 May 2013 16:59:04 -0500
parents 81d2aa42a860
children 4634ca3fc308
line source
1 ###############################################################################
2 #
3 # A generalized cmake file for developing cross-platform games.
4 #
5 # Copyright (C) 2010 Sarah Eris Horsley Caffee
6 #
7 # This is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #
20 #
21 # Instructions:
22 # This cmake file assumes that your source files are laid in out in the
23 # following manner:
24 #
25 # project_dir\ Top level directory of the project.
26 # |---include\ Header files are here.
27 # |---src\ Source files are here.
28 # |---build\ Binaries/objects go here. Run cmake from here.
29 # !---cmake\
30 # | |---modules\ Custom cmake include files, if any, go here.
31 # |---CMakeLists.txt This file.
32 #
33 # You may have more directories, of course, but these are assumed. You probably
34 # want more than one build directory. I normally have build-linux\
35 # and build-windows\ directories.
36 #
37 # Set the App_Name variable, below, to the name of your application and you
38 # are ready to start. Run ccmake, or cmake-gui from within your build
39 # directory, choose the options you need, such as enabling SDL, and you
40 # should be good to go.
41 #
42 # You can uncomment the "SET (CMAKE_VERBOSE_MAKEFILE ON) command if you
43 # need to debug the actual makefile that is generated.
44 #
45 # On windows, you may need to set the SDLDIR environment variable to the location
46 # of your SDL installation before you run cmake-gui.
47 #
48 # When writing path names on Windows, such as when manually specifiying a
49 # file or directory name, either use unix-style forward slashes '/' in the
50 # path names or use double backslashes. If you use a single backslash as the
51 # path name seperator, then cmake will interpret it as an esacpe sequence.
52 # Thus, write "C:/source" or "C:\\source" instead of "C:\source". It's
53 # probably best to use forward slashes in case to ever have a situation
54 # where cmake needs to do recursive processing: each level of cmake will
55 # strip out one of the slashes, so if there are two lev3els of cmake you
56 # need to write \\\, three levels requires \\\\, etc.
57 #
58 # Note that some of the cmake support scripts that find libraries for you
59 # can be controlled by environment variables. For example, you can set the
60 # SDLDIR environment variable before running cmake in order to point to
61 # a different version of SDL than your systems default copy. This is useful
62 # for trying out cutting edge versions of libraries without installing them
63 # system wide.
65 cmake_minimum_required (VERSION 2.6 FATAL_ERROR)
66 #set (CMAKE_VERBOSE_MAKEFILE ON)
68 # Name your program!
69 set (App_Name "Math")
70 if (App_Name STREQUAL "")
71 message (FATAL_ERROR "You must set the App_Name variable!")
72 endif ()
74 # Every project must have a name.
75 project (${App_Name})
78 # You may specify an application description, too. This will be passed to
79 # Doxygen, if you use that.
80 set (App_Description "3D math library for games.")
83 ################################################################################
84 # Special options
87 ################################################################################
88 # Ensure that we are not building in our source directories.
90 set (Build_Dir_OK "TRUE")
91 string (REGEX MATCH "^${CMAKE_SOURCE_DIR}" In_Sub_Dir ${CMAKE_BINARY_DIR})
92 if (In_Sub_Dir)
93 string (REGEX MATCH "^${CMAKE_SOURCE_DIR}/build" In_Build_Dir ${CMAKE_BINARY_DIR})
94 if (NOT In_Build_Dir)
95 set (Build_Dir_OK "FALSE")
96 endif ()
97 endif ()
99 if (NOT Build_Dir_OK)
100 message (FATAL_ERROR "You must run cmake from a directory that is not in your source tree, or that is in a special subdirectory of the tree whose name begins with 'build'.")
101 endif ()
104 ################################################################################
105 # Set up the basic build environment
106 # A build type defines which options are passed to the compiler, and there are
107 # several that CMake defines by default. It does not set one by default, though
108 # so we need to set the build type manually here, and we are setting it to the
109 # generally useful "Release with debug info"
111 if (CMAKE_BUILD_TYPE STREQUAL "")
112 # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This messes up
113 # differentiation between debug and release builds.
114 set (CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
115 endif ()
118 ################################################################################
119 # When using GCC turn on lots of warnings.
120 # Some other options to consider:
121 # C++ -Weffc++
122 # C -std=gnu99 -std=c99
124 if (CMAKE_COMPILER_IS_GNUCXX)
125 add_definitions(-pedantic -Wall)
126 endif ()
128 ################################################################################
129 # Other miscellaneous compiler options
131 #if (CMAKE_COMPILER_IS_GNUCXX)
132 # # Allow anonymous structs
133 # add_definitions(-fms-extensions)
134 #endif ()
136 ################################################################################
137 # Build for profiling.
139 option(Option_Profile_Program "Build for gprof profiling." OFF)
140 if (Option_Profile_Program)
141 add_definitions(-pg)
142 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
143 endif ()
146 ################################################################################
147 # The core project files
150 # Not GLOBing here so that I can explicitly list main.cpp later as part of the
151 # test driver. Also, it just seems good practice to explicitly list things since
152 # it avoids accidental inclusion of things that ought not to be included.
153 set (SRCS_${App_Name}
154 include/Math.h
155 include/Vector.h
156 include/Matrix.h
157 )
159 include_directories (
160 ${PROJECT_SOURCE_DIR}/include
161 )
163 # Build both static and shared libraries
164 # The target properties are needed because, by default, the output name
165 # will be the name in the add_library command, and we need to have different
166 # names in the two commands for the shared and static versions, even though
167 # we want the final files to have the same names with different extensions.
168 #
169 # The prefix is needed mostly in case we build on windows, which has no prefix
170 # by default.
171 #
172 # The clean_direct_output option makes sure that the two lib builds don't
173 # clobber each others temp files since they are being built from the same
174 # sources.
176 #add_library (${App_Name} SHARED
177 # ${SRCS_${App_Name}}
178 #)
179 #set_target_properties (${App_Name} PROPERTIES OUTPUT_NAME ${App_Name})
180 #set_target_properties (${App_Name} PROPERTIES PREFIX "lib")
181 #set_target_properties (${App_Name} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
182 #
183 #add_library (${App_Name}-static STATIC
184 # ${SRCS_${App_Name}}
185 #)
186 #set_target_properties (${App_Name}-static PROPERTIES OUTPUT_NAME ${App_Name})
187 #set_target_properties (${App_Name}-static PROPERTIES PREFIX "lib")
188 #set_target_properties (${App_Name}-static PROPERTIES CLEAN_DIRECT_OUTPUT 1)
190 # Build a test application.
192 link_directories (
193 )
195 include_directories (
196 ${CMAKE_SOURCE_DIR}/include
197 )
199 add_executable (${App_Name}-test
200 src/main.cpp
201 )
203 target_link_libraries (${App_Name}-test
204 # ${App_Name}
205 )
207 ################################################################################
208 # Doxygen documentation
209 #
210 # - Create a directory named docs to hold your Doxygen config and standalone
211 # (.dox) files.
212 # - Name your Doxyfile config as "docs/Doxyfile.in".
213 # - In that file, set the following variables as shown, adjusting INPUT as
214 # needed to reflect the actual location of the fiels you wnat processed.
215 #
216 # PROJECT_NAME = "@App_Name@"
217 # PROJECT_BRIEF = "@App_Description@"
218 # STRIP_FROM_PATH = @CMAKE_CURRENT_SOURCE_DIR@
219 # INPUT = @CMAKE_CURRENT_SOURCE_DIR@/src/ @CMAKE_CURRENT_SOURCE_DIR@/include/ @CMAKE_CURRENT_SOURCE_DIR@/docs/
220 #
221 # Then you can generate the docs with "make docs" and this will create a "docs" directory under your build directory.
222 #
224 option(Option_Doxygen "Generate Doxygen documentation." ON)
226 if (Option_Doxygen)
228 find_package(Doxygen)
229 if (NOT DOXYGEN_FOUND)
230 message (FATAL_ERROR "Doxygen not found!")
231 endif ()
233 configure_file (${CMAKE_CURRENT_SOURCE_DIR}/docs/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile @ONLY)
235 add_custom_target(docs
236 ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile
237 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
238 COMMENT "Generating API documentation with Doxygen" VERBATIM
239 )
241 endif ()