Skip to content

Instantly share code, notes, and snippets.

@greyfade
Created December 22, 2011 02:28
Show Gist options
  • Save greyfade/1508614 to your computer and use it in GitHub Desktop.
Save greyfade/1508614 to your computer and use it in GitHub Desktop.
a cmake example
cmake_minimum_required(VERSION 2.8)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules" ${CMAKE_MODULE_PATH})
# default configuration
set(USE_SFML OFF CACHE BOOL "Prefer SFML framework")
set(USE_GLFW ON CACHE BOOL "Prefer GLFW framework")
project(r3d CXX C)
# add GCC-specific compile flags
if(CMAKE_COMPILER_IS_GNUCXX)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" USE_CXX0X)
if(USE_CXX0X)
set(CMAKE_CXX_FLAGS "-std=c++0x -pedantic" CACHE STRING "" FORCE)
endif(USE_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS "-Wall -Werror" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -pg" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE "-O3" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -pg" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_DEBUG "-O0 -g3 -pg " CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELEASE "-O3" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -pg" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_MINSIZEREL "-Os" CACHE STRING "" FORCE)
endif(CMAKE_COMPILER_IS_GNUCXX)
add_executable(r3d main.cpp)
# make sure Boost is installed
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost 1.45 REQUIRED system thread signals filesystem)
# make sure PhysFS is installed
find_package(PhysFS REQUIRED)
include_directories(${PHYSFS_INCLUDE_DIR})
target_link_libraries(r3d ${PHYSFS_LIBRARY})
# TODO: If OpenGL isn't found, we should complain loudly since an
# appropriate alternative graph driver is unavailable.
# The plan is to allow someone to contribute a DirectX driver
# or produce an alternative as needs arise.
find_package(OpenGL)
if(OPENGL_FOUND)
include_directories(${OPENGL_INCLUDE_DIR})
link_directories(${OPENGL_LIBRARIES})
target_link_libraries(r3d ${OPENGL_LIBRARIES})
endif(OPENGL_FOUND)
find_package(X11)
if(X11_FOUND)
include_directories(${X11_INCLUDE_DIR})
link_directories(${X11_LIBRARIES} ${X11_Xrandr_LIB})
target_link_libraries(r3d ${X11_LIBRARIES} ${X11_Xrandr_LIB})
endif(X11_FOUND)
# Look for Eigen2
find_package(Eigen2 REQUIRED)
include_directories(${EIGEN2_INCLUDE_DIR})
find_package(Assimp)
if(ASSIMP_FOUND)
include_directories(${ASSIMP_INCLUDE_DIR})
endif(ASSIMP_FOUND)
if(USE_GLFW)
set( GLFW_SEARCH_PATHS
/usr/include
/usr/lib
/usr/local/include
/usr/local/lib
${GLFW_PATH}
${GLFW_PATH}/include
${GLFW_PATH}/lib
${GLFW_PATH}/lib/win32/Release
${GLFW_PATH}/lib/win32/Debug
${GLFW_PATH}/support/msvc100/Release
${GLFW_PATH}/support/msvc100/Debug
${GLFW_PATH}/support/msvc90/Release
${GLFW_PATH}/support/msvc90/Debug
${GLFW_PATH}/support/msvc80/Release
${GLFW_PATH}/support/msvc80/Debug
)
find_path(GLFW_INCLUDE_DIR GL/glfw.h PATHS ${GLFW_SEARCH_PATHS} )
find_library(GLFW NAMES libglfw.a glfw PATHS ${GLFW_SEARCH_PATHS})
if(GLFW_INCLUDE_DIR AND GLFW)
include_directories(${GLFW_INCLUDE_DIR})
target_link_libraries(r3d ${GLFW})
endif(GLFW_INCLUDE_DIR AND GLFW)
set( GLEW_SEARCH_PATHS
/usr/include
/usr/lib
/usr/local/include
/usr/local/lib
${GLEW_PATH}
${GLEW_PATH}/include
${GLEW_PATH}/lib
${GLEW_PATH}/lib/win32/Release
${GLEW_PATH}/lib/win32/Debug
${GLEW_PATH}/support/msvc100/Release
${GLEW_PATH}/support/msvc100/Debug
${GLEW_PATH}/support/msvc90/Release
${GLEW_PATH}/support/msvc90/Debug
${GLEW_PATH}/support/msvc80/Release
${GLEW_PATH}/support/msvc80/Debug
)
find_path(GLEW_INCLUDE_DIR GL/glew.h PATHS ${GLEW_SEARCH_PATHS})
find_library(GLEW NAMES libGLEW.a GLEW PATHS ${GLEW_SEARCH_PATHS})
include_directories(${GLEW_INCLUDE_DIR})
target_link_libraries(r3d ${GLEW})
endif(USE_GLFW)
if(USE_SFML)
find_package(SFML REQUIRED)
if(SFML_FOUND)
include_directories(${SFML_INCLUDE_DIR})
link_directories(${SFML_LIBRARY})
target_link_libraries(r3d ${SFML_LIBRARY})
endif(SFML_FOUND)
endif(USE_SFML)
include_directories(. src tinyscheme-1.40)
# import CMakeLists.txt files in src and tinyscheme dirs
add_subdirectory(src) # a static lib is compiled here
add_subdirectory(tinyscheme-1.40)
configure_file(${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_BINARY_DIR}/config.h)
include_directories(${PROJECT_BINARY_DIR})
target_link_libraries(r3d tinyscheme r3dengine)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(r3d ${Boost_LIBRARIES})
target_link_libraries(r3d pthread)
add_subdirectory(test)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment