Commented my understanding of the basic CMake tutorial to the best of my ability.
This commit is contained in:
parent
ef7ce27077
commit
a7bd3031f4
|
@ -1,15 +1,68 @@
|
|||
cmake_minimum_required (VERSION 2.6)
|
||||
project(tutorial)
|
||||
set (tutorial_VERSION_MAJOR 1)
|
||||
set (tutorial_VERSION_MINOR 0)
|
||||
#
|
||||
# Cmake Tutorial
|
||||
#
|
||||
# This is a working example of the tutorial from the CMake website. It
|
||||
# isn't intended to be anything more than that.
|
||||
#
|
||||
|
||||
# Specify what versions of Cmake we support.
|
||||
#
|
||||
cmake_minimum_required (VERSION 2.6)
|
||||
|
||||
# Enables the use of VERSION inside the project() function.
|
||||
#
|
||||
cmake_policy (SET CMP0048 NEW)
|
||||
|
||||
# Specify the name of the project. This results in the following
|
||||
# variables being set and available for use later.
|
||||
#
|
||||
# PROJECT_NAME, PROJECT_SOURCE_DIR, ${PROJECT_NAME}_SOURCE_DIR,
|
||||
# PROJECT_BINARY_DIR, ${PROJECT_NAME}_BINARY_DIR
|
||||
#
|
||||
project(tutorial VERSION 1.1 LANGUAGES "CXX")
|
||||
#
|
||||
# 'project' takes arguments, 'VERSION' and 'LANGUAGE'. See the
|
||||
# accompanying documentation.
|
||||
|
||||
# These variables are set using the VERSION argument above. This is an
|
||||
# alternative (older) variant.
|
||||
#
|
||||
set (tutorial_VERSION_MAJOR 1)
|
||||
set (tutorial_VERSION_MINOR 2)
|
||||
|
||||
# Another way:
|
||||
#
|
||||
set (${PROJECT_NAME}_VERSION_MAJOR 1)
|
||||
set (${PROJECT_NAME}_VERSION_MINOR 4)
|
||||
|
||||
#
|
||||
# As with Makefiles, "last declaration wins."
|
||||
#
|
||||
|
||||
# Specify an option that can control future options. This can also
|
||||
# modify the behavior inside ".in" configuration files in the project
|
||||
# proper, defining them and making them available to preprocessors.
|
||||
#
|
||||
option (USE_MYMATH "Use tutorial provided math implementation" ON)
|
||||
|
||||
# Include a CMAKE module
|
||||
#
|
||||
include (CheckFunctionExists)
|
||||
|
||||
# Specify extra libraries needed to make programs. This must be
|
||||
# declared before check_function_exists() is called, or the linker will
|
||||
# fail when linking math functions.
|
||||
#
|
||||
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} "-lm")
|
||||
|
||||
# Attempt to build a test program that links and dereferences these
|
||||
# functions. If the build is successful, set the variable as an option.
|
||||
#
|
||||
check_function_exists (log HAVE_LOG)
|
||||
check_function_exists (exp HAVE_EXP)
|
||||
|
||||
# Preprocess a configuration file, making simple textual substitutions.
|
||||
#
|
||||
configure_file (
|
||||
"${PROJECT_SOURCE_DIR}/tutorial_config.h.in"
|
||||
"${PROJECT_BINARY_DIR}/tutorial_config.h"
|
||||
|
@ -17,21 +70,43 @@ configure_file (
|
|||
|
||||
include_directories("${PROJECT_BINARY_DIR}")
|
||||
|
||||
# Define the executable to be build, along with the source dependencies.
|
||||
#
|
||||
add_executable(tutorial tutorial.cpp)
|
||||
|
||||
# Describe the installation destination.
|
||||
#
|
||||
install (TARGETS tutorial DESTINATION bin)
|
||||
install (FILES "${PROJECT_BINARY_DIR}/tutorial_config.h" DESTINATION include)
|
||||
|
||||
# If the option is set above, include a subdirectory. It will have its
|
||||
# own CMakeLists.txt file to describe how its contents are to be built.
|
||||
#
|
||||
if (USE_MYMATH)
|
||||
include_directories ("${PROJECT_SOURCE_DIR}/mathfunctions")
|
||||
add_subdirectory(mathfunctions)
|
||||
set (EXTRA_LIBS ${EXTRA_LIBS} mathfunctions)
|
||||
|
||||
# Ensure that the extra libraries are included as a requirement for
|
||||
# a target. This creates a dependency graph that must be resolved
|
||||
# in the correct order.
|
||||
#
|
||||
target_link_libraries(${PROJECT_NAME} ${EXTRA_LIBS})
|
||||
endif (USE_MYMATH)
|
||||
|
||||
target_link_libraries(tutorial ${EXTRA_LIBS})
|
||||
|
||||
# Define basic unit tests that run a program and analyze the output for
|
||||
# very simple strings
|
||||
#
|
||||
include(CTest)
|
||||
|
||||
# A basic test... does it run at all?
|
||||
#
|
||||
add_test (TutorialRuns tutorial 25)
|
||||
|
||||
# A defined macro that tests the propertis of the results. The first
|
||||
# argument to add_test and set_tests_properties is a token to identify
|
||||
# the test to the reviewer.
|
||||
#
|
||||
macro (do_test arg result)
|
||||
add_test (TutorialComp${arg} tutorial ${arg})
|
||||
set_tests_properties(TutorialComp${arg} PROPERTIES PASS_REGULAR_EXPRESSION ${result})
|
||||
|
|
Loading…
Reference in New Issue