===== CMAKE =====
== CMAKE_BUILD_TYPE:STRING ==
CMAKE_BUILD_TYPE:STRING=[ Debug, Release, MinSizeRel, RelWidthDebInfo ]
=== Tips and HowTos ===
[[http://www.kitware.com/blog/home/post/231 | Fortran for C/C++ developers made easier with CMake ]]
== CMAKE with deal.ii ==
recommended structure e.g.:
* CMakeLists.txt
* build
* include
* h1.h
* h2.h
* ...
* src
* CMakeLists.txt
* h1.cpp
* h2.cpp
* ...
CMakeList.txt in top folder
#
# It is good practice to specify a version requirement:
#
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8)
set(TARGET target_name)
#
# Find and import the deal.II project configuration:
#
FIND_PACKAGE(deal.II 8.0 QUIET
HINTS ${deal.II_DIR} ${DEAL_II_DIR} ../ ../../ $ENV{DEAL_II_DIR}
)
IF(NOT ${deal.II_FOUND})
MESSAGE(FATAL_ERROR "\n"
"*** Could not locate deal.II. ***\n\n"
"You may want to either pass a flag -DDEAL_II_DIR=/path/to/deal.II to cmake\n"
"or set an environment variable \"DEAL_II_DIR\" that contains this path."
)
ENDIF()
# Initialize cached variables: This will set the compiler and
# compiler flags to the values deal.II was configured with, as well as,
# CMAKE_BUILD_TYPE to "Debug".
# These values can be altered by editing the cache via
# $ make edit_cache
DEAL_II_INITIALIZE_CACHED_VARIABLES()
project(${TARGET})
# sources for own files; must be defined before calling the executable
include_directories(${PROJECT_SOURCE_DIR}/include)
## Deal.II
include_directories(${DEAL_II_INCLUDE_DIRS})
add_subdirectory(${PROJECT_SOURCE_DIR}/src)
## executable and set the folder for the executable
add_executable(${TARGET} name_of_executable)
set_target_properties(${TARGET} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})
### link against needed libraries, in this case just the own files + dealii files
target_link_libraries(${TARGET} src_lib)
target_link_libraries(${TARGET} ${DEAL_II_LIBRARIES})
## optional custom properties and folder
set_property(TARGET ${TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS "-Wno-unused-variable -Wno-deprecated-declarations")
ADD_CUSTOM_TARGET(run
COMMAND make all
COMMAND ${TARGET}
COMMENT "Run ${TARGET} with ${CMAKE_BUILD_TYPE} configuration"
)
ADD_CUSTOM_TARGET(debug
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
COMMENT "Switch CMAKE_BUILD_TYPE to Debug"
)
ADD_CUSTOM_TARGET(release
COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all
COMMENT "Switch CMAKE_BUILD_TYPE to Release"
)
CMakeList.txt in src folder
SET(SRCS
${SRCS}
${CMAKE_CURRENT_SOURCE_DIR}/h1.cpp
${CMAKE_CURRENT_SOURCE_DIR}/h2.cpp
....
)
## build a library out of the files
add_library(src_lib ${SRCS})