diff --git a/CMakeLists.txt b/CMakeLists.txt index 23b9a3a..81c0c2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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})