Mercurial > solar_system
comparison CMakeLists.txt @ 0:6b163267bd3e
Initial import
author | Eris Caffee <discordia@eldalin.com> |
---|---|
date | Wed, 29 Dec 2010 02:43:17 -0600 |
parents | |
children | 9c54994a2635 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:929801f96da1 |
---|---|
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. | |
64 | |
65 cmake_minimum_required (VERSION 2.6 FATAL_ERROR) | |
66 #set (CMAKE_VERBOSE_MAKEFILE ON) | |
67 | |
68 # Name your program! | |
69 set (App_Name "") | |
70 if (App_Name STREQUAL "") | |
71 message (FATAL_ERROR "You must set the App_Name variable!") | |
72 endif () | |
73 | |
74 # Every project must have a name. | |
75 project (${App_Name}) | |
76 | |
77 | |
78 ################################################################################ | |
79 # Special options | |
80 | |
81 | |
82 ################################################################################ | |
83 # Ensure that we are not building in our source directories. | |
84 | |
85 set (Build_Dir_OK "TRUE") | |
86 string (REGEX MATCH "^${CMAKE_SOURCE_DIR}" In_Sub_Dir ${CMAKE_BINARY_DIR}) | |
87 if (In_Sub_Dir) | |
88 string (REGEX MATCH "^${CMAKE_SOURCE_DIR}/build" In_Build_Dir ${CMAKE_BINARY_DIR}) | |
89 if (NOT In_Build_Dir) | |
90 set (Build_Dir_OK "FALSE") | |
91 endif () | |
92 endif () | |
93 | |
94 if (NOT Build_Dir_OK) | |
95 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'.") | |
96 endif () | |
97 | |
98 | |
99 ################################################################################ | |
100 # Set up the basic build environment | |
101 # A build type defines which options are passed to the compiler, and there are | |
102 # several that CMake defines by default. It does not set one by default, though | |
103 # so we need to set the build type manually here, and we are setting it to the | |
104 # generally useful "Release with debug info" | |
105 | |
106 if (CMAKE_BUILD_TYPE STREQUAL "") | |
107 # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This messes up | |
108 # differentiation between debug and release builds. | |
109 set (CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) | |
110 endif () | |
111 | |
112 | |
113 ################################################################################ | |
114 # When using GCC turn on lots of warnings. | |
115 # Some other options to consider: | |
116 # C++ -Weffc++ | |
117 # C -std=gnu99 -std=c99 | |
118 | |
119 if (CMAKE_COMPILER_IS_GNUCXX) | |
120 add_definitions(-pedantic -Wall) | |
121 endif () | |
122 | |
123 | |
124 ################################################################################ | |
125 | |
126 option(Option_Profile_Program "Build for gprof profiling." OFF) | |
127 if (Option_Profile_Program) | |
128 add_definitions(-pg) | |
129 set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") | |
130 endif () | |
131 | |
132 | |
133 ################################################################################ | |
134 # The core project files | |
135 | |
136 file (GLOB SRCS src/*.c src/*.cpp) | |
137 file (GLOB HDRS include/*.h include/*.hpp) | |
138 | |
139 # The directories that contain the libraries we will be linking against. | |
140 # This must come before the ADD_EXECUTABLE directive. | |
141 link_directories ( | |
142 ) | |
143 | |
144 # The directories that contain the include files our programs use. | |
145 # This must come before the ADD_EXECUTABLE directive. | |
146 include_directories ( | |
147 ${CMAKE_SOURCE_DIR}/include | |
148 ) | |
149 | |
150 # Define the executable program file we are creating. We must list all of | |
151 # the source files. | |
152 if (WIN32) | |
153 add_executable (${App_Name} WIN32 | |
154 ${SRCS} | |
155 ${HDRS} | |
156 ) | |
157 else () | |
158 add_executable (${App_Name} | |
159 ${SRCS} | |
160 ${HDRS} | |
161 ) | |
162 endif () | |
163 | |
164 # Although we listed the library directories above, we also need to list the | |
165 # individual libraries we will be linking against. | |
166 target_link_libraries (${App_Name} | |
167 ) | |
168 | |
169 | |
170 # # An example for a unix library named utils with a test driver program. | |
171 | |
172 # set (SRCS_utils | |
173 # src/utils.cpp | |
174 # include/utils.h | |
175 # ) | |
176 | |
177 # include_directories ( | |
178 # ${PROJECT_SOURCE_DIR}/include | |
179 # ) | |
180 | |
181 # # Build both static and shared libraries | |
182 # # The target properties are needed because, by default, the output name | |
183 # # will be the name in the add_library command, and we need to have different | |
184 # # names in the two commands for the shared and static versions, even though | |
185 # # we want the final files to have the same names with different extensions. | |
186 # # | |
187 # # The prefix is needed mostly in case we build on windows, which has no prefix | |
188 # # by default. | |
189 # # | |
190 # # The clean_direct_output option makes sure that the two lib builds don't | |
191 # # clobber each others temp files since they are being built from the same | |
192 # # sources. | |
193 | |
194 # add_library (utils SHARED | |
195 # ${SRCS_utils} | |
196 # ) | |
197 # set_target_properties (utils PROPERTIES OUTPUT_NAME "utils") | |
198 # set_target_properties (utils PROPERTIES PREFIX "lib") | |
199 # set_target_properties (utils PROPERTIES CLEAN_DIRECT_OUTPUT 1) | |
200 | |
201 # add_library (utils-static STATIC | |
202 # ${SRCS_utils} | |
203 # ) | |
204 # set_target_properties (utils-static PROPERTIES OUTPUT_NAME "utils") | |
205 # set_target_properties (utils-static PROPERTIES PREFIX "lib") | |
206 # set_target_properties (utils-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) | |
207 | |
208 # # Build a test application. | |
209 | |
210 # add_executable (test | |
211 # src/main.cpp | |
212 # ) | |
213 | |
214 # target_link_libraries (test | |
215 # utils | |
216 # ) | |
217 | |
218 | |
219 ################################################################################ | |
220 # X11 | |
221 # | |
222 # Note that the FindX11.cmake package does _not_ include most X extensions | |
223 # in the X11_LIBRARIES variable, although it does pick up their header files | |
224 # in the X11_INCLUDE_DIR variable. | |
225 # | |
226 # To link a program with extensions, such as Xrandr, or Xv, you must manually | |
227 # update the target_link_libraries to include the appropriate library variable. | |
228 # ${X11_Xrandr_LIB} is an example. See the FindX11.cmake file for a complete | |
229 # list of availble variables. | |
230 # | |
231 | |
232 option(Option_X11_Dev "Build an X11 Application." OFF) | |
233 | |
234 if (Option_X11_Dev) | |
235 | |
236 option(Option_Xrandr "Use Xrandr" OFF) | |
237 option(Option_Xinerama "Use Xinerama" OFF) | |
238 | |
239 | |
240 ######################################## | |
241 find_package(X11) | |
242 if (NOT X11_FOUND) | |
243 message (FATAL_ERROR "X11 not found!") | |
244 endif () | |
245 | |
246 include_directories( | |
247 ${X11_INCLUDE_DIR} | |
248 ${INCLUDE_DIRECTORIES} | |
249 ) | |
250 | |
251 target_link_libraries(${App_Name} | |
252 ${X11_LIBRARIES} | |
253 ${TARGET_LINK_LIBRARIES} | |
254 ) | |
255 | |
256 ######################################## | |
257 if (Option_Xrandr) | |
258 if (NOT X11_Xrandr_FOUND) | |
259 message (FATAL_ERRO "Xrandr not found!") | |
260 endif () | |
261 target_link_libraries(${App_Name} | |
262 ${X11_Xrandr_LIB} | |
263 ${TARGET_LINK_LIBRARIES} | |
264 ) | |
265 endif () | |
266 | |
267 ######################################## | |
268 if (Option_Xinerama) | |
269 if (NOT X11_Xinerama_FOUND) | |
270 message (FATAL_ERRO "Xinerama not found!") | |
271 endif () | |
272 target_link_libraries(${App_Name} | |
273 ${X11_Xinerama_LIB} | |
274 ${TARGET_LINK_LIBRARIES} | |
275 ) | |
276 endif () | |
277 | |
278 endif () | |
279 | |
280 ################################################################################ | |
281 # SDL | |
282 # | |
283 # Enabling SDL support enables several suboptions to make some common SDL | |
284 # extension libraries available as well. | |
285 # | |
286 # If any of the SDL libraries are not found automatically, you will need | |
287 # to set the appropriate environment variables and rerun cmake. You will | |
288 # need to remove the CMake cache before doing so. | |
289 | |
290 # If you don't want to set actual environment variables before running | |
291 # CMake, then uncomment the if block below and put in the actual | |
292 # locations of your SDL installation. | |
293 | |
294 option(Option_SDL_Dev "Build an SDL application." OFF) | |
295 | |
296 if (Option_SDL_Dev) | |
297 | |
298 # # Force SDL 1.3 only | |
299 # if (WIN32) | |
300 # set (ENV{SDLDIR} "c:/gamedev/deps/sdl/SDL-build") | |
301 # else () | |
302 # set (ENV{SDLDIR} "/home/eris/gamedev/deps/sdl/SDL-build") | |
303 # endif () | |
304 # add_definitions(-DSDL_NO_COMPAT) | |
305 | |
306 # SDL base package | |
307 # To use a version of SDL other than your systems default, set the SDLDIR | |
308 # environment variable to the installation location of your preferred version. | |
309 find_package (SDL) | |
310 if (NOT SDL_FOUND) | |
311 message (FATAL_ERROR "SDL not found!") | |
312 endif (NOT SDL_FOUND) | |
313 include_directories( | |
314 ${SDL_INCLUDE_DIR} | |
315 ${INCLUDE_DIRECTORIES} | |
316 ) | |
317 target_link_libraries(${App_Name} | |
318 ${SDL_LIBRARY} | |
319 ${TARGET_LINK_LIBRARIES} | |
320 ) | |
321 | |
322 # SDL_ttf | |
323 # Environment variables SDLTTFDIR and SDLDIR will be checked in that order | |
324 # and if set cmake will try to find SDL_ttf in the specified directory. | |
325 option(Option_SDL_Dev_SDL_ttf "Use SDL_ttf." OFF) | |
326 if (Option_SDL_Dev_SDL_ttf) | |
327 find_package (SDL_ttf) | |
328 if (NOT SDLTTF_FOUND) | |
329 message (FATAL_ERROR "SDL_ttf not found!") | |
330 endif (NOT SDLTTF_FOUND) | |
331 include_directories( | |
332 ${SDLTTF_INCLUDE_DIR} | |
333 ${INCLUDE_DIRECTORIES} | |
334 ) | |
335 target_link_libraries(${App_Name} | |
336 ${SDLTTF_LIBRARY} | |
337 ${TARGET_LINK_LIBRARIES} | |
338 ) | |
339 endif () | |
340 | |
341 # SDL_image | |
342 # Environment variables SDLIMAGEDIR and SDLDIR will be checked in that order | |
343 # and if set cmake will try to find SDL_image in the specified directory. | |
344 option(Option_SDL_Dev_SDL_image "Use SDL_image." OFF) | |
345 if (Option_SDL_Dev_SDL_image) | |
346 find_package (SDL_image) | |
347 if (NOT SDLIMAGE_FOUND) | |
348 message (FATAL_ERROR "SDL_image not found!") | |
349 endif (NOT SDLIMAGE_FOUND) | |
350 include_directories( | |
351 ${SDLIMAGE_INCLUDE_DIR} | |
352 ${INCLUDE_DIRECTORIES} | |
353 ) | |
354 target_link_libraries(${App_Name} | |
355 ${SDLIMAGE_LIBRARY} | |
356 ${TARGET_LINK_LIBRARIES} | |
357 ) | |
358 endif () | |
359 | |
360 # SDL_mixer | |
361 # Environment variables SDLMIXERDIR and SDLDIR will be checked in that order | |
362 # and if set cmake will try to find SDL_mixer in the specified directory. | |
363 option(Option_SDL_Dev_SDL_mixer "Use SDL_mixer." OFF) | |
364 if (Option_SDL_Dev_SDL_mixer) | |
365 find_package (SDL_mixer) | |
366 if (NOT SDLMIXER_FOUND) | |
367 message (FATAL_ERROR "SDL_mixer not found!") | |
368 endif (NOT SDLMIXER_FOUND) | |
369 include_directories( | |
370 ${SDLMIXER_INCLUDE_DIR} | |
371 ${INCLUDE_DIRECTORIES} | |
372 ) | |
373 target_link_libraries(${App_Name} | |
374 ${SDLMIXER_LIBRARY} | |
375 ${TARGET_LINK_LIBRARIES} | |
376 ) | |
377 endif () | |
378 | |
379 # SDL_net | |
380 # Environment variables SDLNETDIR and SDLDIR will be checked in that order | |
381 # and if set cmake will try to find SDL_net in the specified directory. | |
382 option(Option_SDL_Dev_SDL_net "Use SDL_net." OFF) | |
383 if (Option_SDL_Dev_SDL_net) | |
384 find_package (SDL_net) | |
385 if (NOT SDLNET_FOUND) | |
386 message (FATAL_ERROR "SDL_net not found!") | |
387 endif (NOT SDLNET_FOUND) | |
388 include_directories( | |
389 ${SDLNET_INCLUDE_DIR} | |
390 ${INCLUDE_DIRECTORIES} | |
391 ) | |
392 target_link_libraries(${App_Name} | |
393 ${SDLNET_LIBRARY} | |
394 ${TARGET_LINK_LIBRARIES} | |
395 ) | |
396 endif () | |
397 | |
398 endif (Option_SDL_Dev) | |
399 | |
400 | |
401 ################################################################################ | |
402 | |
403 option(Option_OpenGL_Dev "Build an OpenGL Application." OFF) | |
404 | |
405 if (Option_OpenGL_Dev) | |
406 | |
407 find_package(OpenGL) | |
408 | |
409 include_directories( | |
410 ${OpenGL_INCLUDE_DIR} | |
411 ${INCLUDE_DIRECTORIES} | |
412 ) | |
413 | |
414 target_link_libraries(${App_Name} | |
415 ${OpenGL_LIBRARIES} | |
416 ${TARGET_LINK_LIBRARIES} | |
417 ) | |
418 | |
419 endif () | |
420 | |
421 ################################################################################ | |
422 | |
423 option(Option_OpenAL_Dev "Build an OpenAL Application." OFF) | |
424 | |
425 if (Option_OpenAL_Dev) | |
426 find_package(OpenAL) | |
427 | |
428 include_directories( | |
429 ${OpenAL_INCLUDE_DIR} | |
430 ${INCLUDE_DIRECTORIES} | |
431 ) | |
432 | |
433 target_link_libraries(${App_Name} | |
434 ${OpenAL_LIBRARIES} | |
435 ${TARGET_LINK_LIBRARIES} | |
436 ) | |
437 | |
438 endif () | |
439 | |
440 ################################################################################ |