Commented my understanding of the basic CMake tutorial to the best of my ability.

This commit is contained in:
Elf M. Sternberg 2017-01-27 17:15:36 -08:00
parent ef7ce27077
commit a7bd3031f4
1 changed files with 81 additions and 6 deletions

View File

@ -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})