Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
CMake
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
2,690
Issues
2,690
List
Boards
Labels
Milestones
Merge Requests
26
Merge Requests
26
Packages
Packages
Container Registry
External Wiki
External Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
CMake
CMake
Commits
f2ddedfa
Commit
f2ddedfa
authored
Jan 20, 2019
by
Betsy McPhail
1
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Tests: Update CMake tutorial
Latest material from data.kitware.com -> Collections -> Courses -> CMake.
parent
43865150
Changes
112
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
112 changed files
with
3099 additions
and
604 deletions
+3099
-604
Tests/CMakeLists.txt
Tests/CMakeLists.txt
+27
-8
Tests/Tutorial/Complete/CMakeLists.txt
Tests/Tutorial/Complete/CMakeLists.txt
+116
-0
Tests/Tutorial/Complete/Config.cmake.in
Tests/Tutorial/Complete/Config.cmake.in
+4
-0
Tests/Tutorial/Complete/License.txt
Tests/Tutorial/Complete/License.txt
+1
-1
Tests/Tutorial/Complete/MathFunctions/CMakeLists.txt
Tests/Tutorial/Complete/MathFunctions/CMakeLists.txt
+68
-0
Tests/Tutorial/Complete/MathFunctions/MakeTable.cxx
Tests/Tutorial/Complete/MathFunctions/MakeTable.cxx
+25
-0
Tests/Tutorial/Complete/MathFunctions/MathFunctions.cxx
Tests/Tutorial/Complete/MathFunctions/MathFunctions.cxx
+18
-0
Tests/Tutorial/Complete/MathFunctions/MathFunctions.h
Tests/Tutorial/Complete/MathFunctions/MathFunctions.h
+14
-0
Tests/Tutorial/Complete/MathFunctions/mysqrt.cxx
Tests/Tutorial/Complete/MathFunctions/mysqrt.cxx
+45
-0
Tests/Tutorial/Complete/MathFunctions/mysqrt.h
Tests/Tutorial/Complete/MathFunctions/mysqrt.h
+6
-0
Tests/Tutorial/Complete/TutorialConfig.h.in
Tests/Tutorial/Complete/TutorialConfig.h.in
+3
-0
Tests/Tutorial/Complete/tutorial.cxx
Tests/Tutorial/Complete/tutorial.cxx
+25
-0
Tests/Tutorial/Consumer/CMakeLists.txt
Tests/Tutorial/Consumer/CMakeLists.txt
+51
-0
Tests/Tutorial/Consumer/Config.cmake.in
Tests/Tutorial/Consumer/Config.cmake.in
+14
-0
Tests/Tutorial/Consumer/consumer.cxx
Tests/Tutorial/Consumer/consumer.cxx
+11
-0
Tests/Tutorial/Consumer/directions.txt
Tests/Tutorial/Consumer/directions.txt
+6
-0
Tests/Tutorial/MultiPackage/CMakeLists.txt
Tests/Tutorial/MultiPackage/CMakeLists.txt
+109
-0
Tests/Tutorial/MultiPackage/Config.cmake.in
Tests/Tutorial/MultiPackage/Config.cmake.in
+4
-0
Tests/Tutorial/MultiPackage/License.txt
Tests/Tutorial/MultiPackage/License.txt
+2
-0
Tests/Tutorial/MultiPackage/MathFunctions/CMakeLists.txt
Tests/Tutorial/MultiPackage/MathFunctions/CMakeLists.txt
+68
-0
Tests/Tutorial/MultiPackage/MathFunctions/MakeTable.cxx
Tests/Tutorial/MultiPackage/MathFunctions/MakeTable.cxx
+25
-0
Tests/Tutorial/MultiPackage/MathFunctions/MathFunctions.cxx
Tests/Tutorial/MultiPackage/MathFunctions/MathFunctions.cxx
+18
-0
Tests/Tutorial/MultiPackage/MathFunctions/MathFunctions.h
Tests/Tutorial/MultiPackage/MathFunctions/MathFunctions.h
+14
-0
Tests/Tutorial/MultiPackage/MathFunctions/mysqrt.cxx
Tests/Tutorial/MultiPackage/MathFunctions/mysqrt.cxx
+45
-0
Tests/Tutorial/MultiPackage/MathFunctions/mysqrt.h
Tests/Tutorial/MultiPackage/MathFunctions/mysqrt.h
+6
-0
Tests/Tutorial/MultiPackage/MultiCPackConfig.cmake
Tests/Tutorial/MultiPackage/MultiCPackConfig.cmake
+7
-0
Tests/Tutorial/MultiPackage/TutorialConfig.h.in
Tests/Tutorial/MultiPackage/TutorialConfig.h.in
+3
-0
Tests/Tutorial/MultiPackage/directions.txt
Tests/Tutorial/MultiPackage/directions.txt
+34
-0
Tests/Tutorial/MultiPackage/tutorial.cxx
Tests/Tutorial/MultiPackage/tutorial.cxx
+25
-0
Tests/Tutorial/Readme.txt
Tests/Tutorial/Readme.txt
+16
-0
Tests/Tutorial/Step1/CMakeLists.txt
Tests/Tutorial/Step1/CMakeLists.txt
+1
-18
Tests/Tutorial/Step1/directions.txt
Tests/Tutorial/Step1/directions.txt
+96
-0
Tests/Tutorial/Step1/tutorial.cxx
Tests/Tutorial/Step1/tutorial.cxx
+9
-8
Tests/Tutorial/Step10/CMakeLists.txt
Tests/Tutorial/Step10/CMakeLists.txt
+77
-0
Tests/Tutorial/Step10/License.txt
Tests/Tutorial/Step10/License.txt
+2
-0
Tests/Tutorial/Step10/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step10/MathFunctions/CMakeLists.txt
+61
-0
Tests/Tutorial/Step10/MathFunctions/MakeTable.cxx
Tests/Tutorial/Step10/MathFunctions/MakeTable.cxx
+25
-0
Tests/Tutorial/Step10/MathFunctions/MathFunctions.cxx
Tests/Tutorial/Step10/MathFunctions/MathFunctions.cxx
+18
-0
Tests/Tutorial/Step10/MathFunctions/MathFunctions.h
Tests/Tutorial/Step10/MathFunctions/MathFunctions.h
+14
-0
Tests/Tutorial/Step10/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step10/MathFunctions/mysqrt.cxx
+45
-0
Tests/Tutorial/Step10/MathFunctions/mysqrt.h
Tests/Tutorial/Step10/MathFunctions/mysqrt.h
+6
-0
Tests/Tutorial/Step10/TutorialConfig.h.in
Tests/Tutorial/Step10/TutorialConfig.h.in
+3
-0
Tests/Tutorial/Step10/directions.txt
Tests/Tutorial/Step10/directions.txt
+38
-0
Tests/Tutorial/Step10/tutorial.cxx
Tests/Tutorial/Step10/tutorial.cxx
+25
-0
Tests/Tutorial/Step11/CMakeLists.txt
Tests/Tutorial/Step11/CMakeLists.txt
+77
-0
Tests/Tutorial/Step11/License.txt
Tests/Tutorial/Step11/License.txt
+2
-0
Tests/Tutorial/Step11/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step11/MathFunctions/CMakeLists.txt
+60
-0
Tests/Tutorial/Step11/MathFunctions/MakeTable.cxx
Tests/Tutorial/Step11/MathFunctions/MakeTable.cxx
+25
-0
Tests/Tutorial/Step11/MathFunctions/MathFunctions.cxx
Tests/Tutorial/Step11/MathFunctions/MathFunctions.cxx
+18
-0
Tests/Tutorial/Step11/MathFunctions/MathFunctions.h
Tests/Tutorial/Step11/MathFunctions/MathFunctions.h
+14
-0
Tests/Tutorial/Step11/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step11/MathFunctions/mysqrt.cxx
+45
-0
Tests/Tutorial/Step11/MathFunctions/mysqrt.h
Tests/Tutorial/Step11/MathFunctions/mysqrt.h
+6
-0
Tests/Tutorial/Step11/TutorialConfig.h.in
Tests/Tutorial/Step11/TutorialConfig.h.in
+3
-0
Tests/Tutorial/Step11/directions.txt
Tests/Tutorial/Step11/directions.txt
+104
-0
Tests/Tutorial/Step11/tutorial.cxx
Tests/Tutorial/Step11/tutorial.cxx
+25
-0
Tests/Tutorial/Step2/CMakeLists.txt
Tests/Tutorial/Step2/CMakeLists.txt
+14
-20
Tests/Tutorial/Step2/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step2/MathFunctions/mysqrt.cxx
+5
-8
Tests/Tutorial/Step2/TutorialConfig.h.in
Tests/Tutorial/Step2/TutorialConfig.h.in
+0
-1
Tests/Tutorial/Step2/directions.txt
Tests/Tutorial/Step2/directions.txt
+102
-0
Tests/Tutorial/Step2/tutorial.cxx
Tests/Tutorial/Step2/tutorial.cxx
+11
-21
Tests/Tutorial/Step3/CMakeLists.txt
Tests/Tutorial/Step3/CMakeLists.txt
+22
-52
Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step3/MathFunctions/CMakeLists.txt
+0
-3
Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step3/MathFunctions/mysqrt.cxx
+5
-8
Tests/Tutorial/Step3/directions.txt
Tests/Tutorial/Step3/directions.txt
+26
-0
Tests/Tutorial/Step3/tutorial.cxx
Tests/Tutorial/Step3/tutorial.cxx
+12
-13
Tests/Tutorial/Step4/CMakeLists.txt
Tests/Tutorial/Step4/CMakeLists.txt
+20
-52
Tests/Tutorial/Step4/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step4/MathFunctions/CMakeLists.txt
+5
-2
Tests/Tutorial/Step4/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step4/MathFunctions/mysqrt.cxx
+5
-18
Tests/Tutorial/Step4/TutorialConfig.h.in
Tests/Tutorial/Step4/TutorialConfig.h.in
+0
-4
Tests/Tutorial/Step4/directions.txt
Tests/Tutorial/Step4/directions.txt
+72
-0
Tests/Tutorial/Step4/tutorial.cxx
Tests/Tutorial/Step4/tutorial.cxx
+12
-13
Tests/Tutorial/Step5/CMakeLists.txt
Tests/Tutorial/Step5/CMakeLists.txt
+42
-44
Tests/Tutorial/Step5/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step5/MathFunctions/CMakeLists.txt
+8
-15
Tests/Tutorial/Step5/MathFunctions/MakeTable.cxx
Tests/Tutorial/Step5/MathFunctions/MakeTable.cxx
+14
-21
Tests/Tutorial/Step5/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step5/MathFunctions/mysqrt.cxx
+5
-22
Tests/Tutorial/Step5/TutorialConfig.h.in
Tests/Tutorial/Step5/TutorialConfig.h.in
+0
-4
Tests/Tutorial/Step5/directions.txt
Tests/Tutorial/Step5/directions.txt
+69
-0
Tests/Tutorial/Step5/tutorial.cxx
Tests/Tutorial/Step5/tutorial.cxx
+12
-13
Tests/Tutorial/Step6/CMakeLists.txt
Tests/Tutorial/Step6/CMakeLists.txt
+46
-48
Tests/Tutorial/Step6/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step6/MathFunctions/CMakeLists.txt
+11
-21
Tests/Tutorial/Step6/MathFunctions/MakeTable.cxx
Tests/Tutorial/Step6/MathFunctions/MakeTable.cxx
+14
-21
Tests/Tutorial/Step6/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step6/MathFunctions/mysqrt.cxx
+12
-19
Tests/Tutorial/Step6/directions.txt
Tests/Tutorial/Step6/directions.txt
+111
-0
Tests/Tutorial/Step6/tutorial.cxx
Tests/Tutorial/Step6/tutorial.cxx
+12
-13
Tests/Tutorial/Step7/CMakeLists.txt
Tests/Tutorial/Step7/CMakeLists.txt
+46
-52
Tests/Tutorial/Step7/License.txt
Tests/Tutorial/Step7/License.txt
+1
-1
Tests/Tutorial/Step7/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step7/MathFunctions/CMakeLists.txt
+19
-14
Tests/Tutorial/Step7/MathFunctions/MakeTable.cxx
Tests/Tutorial/Step7/MathFunctions/MakeTable.cxx
+14
-21
Tests/Tutorial/Step7/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step7/MathFunctions/mysqrt.cxx
+6
-12
Tests/Tutorial/Step7/directions.txt
Tests/Tutorial/Step7/directions.txt
+40
-0
Tests/Tutorial/Step7/tutorial.cxx
Tests/Tutorial/Step7/tutorial.cxx
+12
-13
Tests/Tutorial/Step8/CMakeLists.txt
Tests/Tutorial/Step8/CMakeLists.txt
+82
-0
Tests/Tutorial/Step8/License.txt
Tests/Tutorial/Step8/License.txt
+2
-0
Tests/Tutorial/Step8/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step8/MathFunctions/CMakeLists.txt
+29
-0
Tests/Tutorial/Step8/MathFunctions/MakeTable.cxx
Tests/Tutorial/Step8/MathFunctions/MakeTable.cxx
+25
-0
Tests/Tutorial/Step8/MathFunctions/MathFunctions.h
Tests/Tutorial/Step8/MathFunctions/MathFunctions.h
+1
-0
Tests/Tutorial/Step8/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step8/MathFunctions/mysqrt.cxx
+42
-0
Tests/Tutorial/Step8/TutorialConfig.h.in
Tests/Tutorial/Step8/TutorialConfig.h.in
+8
-0
Tests/Tutorial/Step8/directions.txt
Tests/Tutorial/Step8/directions.txt
+38
-0
Tests/Tutorial/Step8/tutorial.cxx
Tests/Tutorial/Step8/tutorial.cxx
+32
-0
Tests/Tutorial/Step9/CMakeLists.txt
Tests/Tutorial/Step9/CMakeLists.txt
+81
-0
Tests/Tutorial/Step9/CTestConfig.cmake
Tests/Tutorial/Step9/CTestConfig.cmake
+15
-0
Tests/Tutorial/Step9/License.txt
Tests/Tutorial/Step9/License.txt
+2
-0
Tests/Tutorial/Step9/MathFunctions/CMakeLists.txt
Tests/Tutorial/Step9/MathFunctions/CMakeLists.txt
+35
-0
Tests/Tutorial/Step9/MathFunctions/MakeTable.cxx
Tests/Tutorial/Step9/MathFunctions/MakeTable.cxx
+25
-0
Tests/Tutorial/Step9/MathFunctions/MathFunctions.cxx
Tests/Tutorial/Step9/MathFunctions/MathFunctions.cxx
+18
-0
Tests/Tutorial/Step9/MathFunctions/MathFunctions.h
Tests/Tutorial/Step9/MathFunctions/MathFunctions.h
+1
-0
Tests/Tutorial/Step9/MathFunctions/mysqrt.cxx
Tests/Tutorial/Step9/MathFunctions/mysqrt.cxx
+41
-0
Tests/Tutorial/Step9/MathFunctions/mysqrt.h
Tests/Tutorial/Step9/MathFunctions/mysqrt.h
+6
-0
Tests/Tutorial/Step9/TutorialConfig.h.in
Tests/Tutorial/Step9/TutorialConfig.h.in
+3
-0
Tests/Tutorial/Step9/directions.txt
Tests/Tutorial/Step9/directions.txt
+166
-0
Tests/Tutorial/Step9/tutorial.cxx
Tests/Tutorial/Step9/tutorial.cxx
+33
-0
No files found.
Tests/CMakeLists.txt
View file @
f2ddedfa
...
...
@@ -1704,18 +1704,37 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
DEPENDS ExternalProjectUpdateSetup
)
# do each of the tutorial steps
foreach
(
STP RANGE 1 7
)
add_test
(
TutorialStep
${
STP
}
${
CMAKE_CTEST_COMMAND
}
function
(
add_tutorial_test step_name use_mymath
)
set
(
tutorial_test_name Tutorial
${
step_name
}
)
set
(
tutorial_build_dir
"
${
CMake_BINARY_DIR
}
/Tests/Tutorial/
${
step_name
}
"
)
if
(
use_mymath
)
set
(
tutorial_build_options
""
)
else
()
set
(
tutorial_test_name
${
tutorial_test_name
}
_MYMATH
)
set
(
tutorial_build_dir
"
${
tutorial_build_dir
}
_MYMATH"
)
set
(
tutorial_build_options -DUSE_MYMATH:BOOL=OFF
)
endif
()
add_test
(
${
tutorial_test_name
}
${
CMAKE_CTEST_COMMAND
}
--build-and-test
"
${
CMake_SOURCE_DIR
}
/Tests/Tutorial/Step
${
STP
}
"
"
${
CMake_BINARY_DIR
}
/Tests/Tutorial/Step
${
STP
}
"
--build-two-config
"
${
CMake_SOURCE_DIR
}
/Tests/Tutorial/
${
step_name
}
"
${
tutorial_build_dir
}
_Build
${
build_generator_args
}
--build-project Tutorial
--build-options
${
build_options
}
--build-options
${
build_options
}
${
tutorial_build_options
}
--test-command Tutorial 25.0
)
endforeach
()
list
(
APPEND TEST_BUILD_DIRS
"
${
CMake_BINARY_DIR
}
/Tests/Tutorial"
)
list
(
APPEND TEST_BUILD_DIRS
"
${
CMake_BINARY_DIR
}
/
${
tutorial_build_dir
}
_Build"
)
endfunction
()
if
(
NOT CMake_TEST_EXTERNAL_CMAKE
)
foreach
(
STP RANGE 1 11
)
add_tutorial_test
(
Step
${
STP
}
TRUE
)
endforeach
()
add_tutorial_test
(
Complete TRUE
)
foreach
(
STP RANGE 3 11
)
add_tutorial_test
(
Step
${
STP
}
FALSE
)
endforeach
()
add_tutorial_test
(
Complete FALSE
)
endif
()
add_test
(
testing
${
CMAKE_CTEST_COMMAND
}
-C \
${
CTEST_CONFIGURATION_TYPE
}
--build-and-test
...
...
Tests/Tutorial/Complete/CMakeLists.txt
0 → 100644
View file @
f2ddedfa
cmake_minimum_required
(
VERSION 3.3
)
project
(
Tutorial
)
# control where the static and shared libraries are built so that on windows
# we don't need to tinker with the path to run the executable
set
(
CMAKE_ARCHIVE_OUTPUT_DIRECTORY
"
${
PROJECT_BINARY_DIR
}
"
)
set
(
CMAKE_LIBRARY_OUTPUT_DIRECTORY
"
${
PROJECT_BINARY_DIR
}
"
)
set
(
CMAKE_RUNTIME_OUTPUT_DIRECTORY
"
${
PROJECT_BINARY_DIR
}
"
)
set
(
CMAKE_CXX_STANDARD 11
)
set
(
CMAKE_CXX_STANDARD_REQUIRED True
)
option
(
BUILD_SHARED_LIBS
"Build using shared libraries"
ON
)
# the version number.
set
(
Tutorial_VERSION_MAJOR 1
)
set
(
Tutorial_VERSION_MINOR 0
)
if
(
APPLE
)
set
(
CMAKE_INSTALL_RPATH
"@executable_path/../lib"
)
elseif
(
UNIX
)
set
(
CMAKE_INSTALL_RPATH
"$ORIGIN/../lib"
)
endif
()
# configure a header file to pass the version number only
configure_file
(
"
${
PROJECT_SOURCE_DIR
}
/TutorialConfig.h.in"
"
${
PROJECT_BINARY_DIR
}
/TutorialConfig.h"
)
# add the MathFunctions library
add_subdirectory
(
MathFunctions
)
# add the executable
add_executable
(
Tutorial tutorial.cxx
)
target_link_libraries
(
Tutorial MathFunctions
)
# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
target_include_directories
(
Tutorial PUBLIC
"
${
PROJECT_BINARY_DIR
}
"
)
# add the install targets
install
(
TARGETS Tutorial DESTINATION bin
)
install
(
FILES
"
${
PROJECT_BINARY_DIR
}
/TutorialConfig.h"
DESTINATION include
)
# enable testing
enable_testing
()
# does the application run
add_test
(
NAME Runs COMMAND Tutorial 25
)
# does the usage message work?
add_test
(
NAME Usage COMMAND Tutorial
)
set_tests_properties
(
Usage
PROPERTIES PASS_REGULAR_EXPRESSION
"Usage:.*number"
)
# define a function to simplify adding tests
function
(
do_test target arg result
)
add_test
(
NAME Comp
${
arg
}
COMMAND
${
target
}
${
arg
}
)
set_tests_properties
(
Comp
${
arg
}
PROPERTIES PASS_REGULAR_EXPRESSION
${
result
}
)
endfunction
(
do_test
)
# do a bunch of result based tests
do_test
(
Tutorial 4
"4 is 2"
)
do_test
(
Tutorial 9
"9 is 3"
)
do_test
(
Tutorial 5
"5 is 2.236"
)
do_test
(
Tutorial 7
"7 is 2.645"
)
do_test
(
Tutorial 25
"25 is 5"
)
do_test
(
Tutorial -25
"-25 is [-nan|nan|0]"
)
do_test
(
Tutorial 0.0001
"0.0001 is 0.01"
)
include
(
InstallRequiredSystemLibraries
)
set
(
CPACK_RESOURCE_FILE_LICENSE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/License.txt"
)
set
(
CPACK_PACKAGE_VERSION_MAJOR
"
${
Tutorial_VERSION_MAJOR
}
"
)
set
(
CPACK_PACKAGE_VERSION_MINOR
"
${
Tutorial_VERSION_MINOR
}
"
)
include
(
CPack
)
# install the configuration targets
install
(
EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)
include
(
CMakePackageConfigHelpers
)
# generate the config file that is includes the exports
configure_package_config_file
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/Config.cmake.in
"
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsConfig.cmake"
INSTALL_DESTINATION
"lib/cmake/example"
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
# generate the version file for the config file
write_basic_package_version_file
(
"
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsConfigVersion.cmake"
VERSION
"
${
Tutorial_VERSION_MAJOR
}
.
${
Tutorial_VERSION_MINOR
}
"
COMPATIBILITY AnyNewerVersion
)
# install the configuration file
install
(
FILES
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsConfig.cmake
DESTINATION lib/cmake/MathFunctions
)
# generate the export targets for the build tree
# needs to be after the install(TARGETS ) command
export
(
EXPORT MathFunctionsTargets
FILE
"
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsTargets.cmake"
)
Tests/Tutorial/Complete/Config.cmake.in
0 → 100644
View file @
f2ddedfa
@PACKAGE_INIT@
include ( "${CMAKE_CURRENT_LIST_DIR}/MathFunctionsTargets.cmake" )
Tests/Tutorial/
Step6
/License.txt
→
Tests/Tutorial/
Complete
/License.txt
View file @
f2ddedfa
This is the open source License.txt file introduced in
CMake/T
ests/Tutorial/Step6
...
CMake/T
utorial/Step7
...
Tests/Tutorial/Complete/MathFunctions/CMakeLists.txt
0 → 100644
View file @
f2ddedfa
# add the library that runs
add_library
(
MathFunctions MathFunctions.cxx
)
# state that anybody linking to us needs to include the current source dir
# to find MathFunctions.h, while we don't.
target_include_directories
(
MathFunctions
INTERFACE
$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>
$<INSTALL_INTERFACE:include>
)
# should we use our own math functions
option
(
USE_MYMATH
"Use tutorial provided math implementation"
ON
)
if
(
USE_MYMATH
)
# does this system provide the log and exp functions?
include
(
CheckSymbolExists
)
set
(
CMAKE_REQUIRED_LIBRARIES
"m"
)
check_symbol_exists
(
log
"math.h"
HAVE_LOG
)
check_symbol_exists
(
exp
"math.h"
HAVE_EXP
)
# first we add the executable that generates the table
add_executable
(
MakeTable MakeTable.cxx
)
# add the command to generate the source code
add_custom_command
(
OUTPUT
${
CMAKE_CURRENT_BINARY_DIR
}
/Table.h
COMMAND MakeTable
${
CMAKE_CURRENT_BINARY_DIR
}
/Table.h
DEPENDS MakeTable
)
# library that just does sqrt
add_library
(
SqrtLibrary STATIC
mysqrt.cxx
${
CMAKE_CURRENT_BINARY_DIR
}
/Table.h
)
# state that we depend on our binary dir to find Table.h
target_include_directories
(
SqrtLibrary PRIVATE
${
CMAKE_CURRENT_BINARY_DIR
}
)
set_target_properties
(
SqrtLibrary PROPERTIES
POSITION_INDEPENDENT_CODE
${
BUILD_SHARED_LIBS
}
)
target_compile_definitions
(
SqrtLibrary PRIVATE
"$<$<BOOL:
${
HAVE_LOG
}
>:HAVE_LOG>"
"$<$<BOOL:
${
HAVE_EXP
}
>:HAVE_EXP>"
)
target_link_libraries
(
MathFunctions PRIVATE SqrtLibrary
)
endif
()
target_compile_definitions
(
MathFunctions PRIVATE
"$<$<BOOL:
${
USE_MYMATH
}
>:USE_MYMATH>"
)
# define the symbol stating we are using the declspec(dllexport) when
# building on windows
target_compile_definitions
(
MathFunctions PRIVATE
"EXPORTING_MYMATH"
)
# setup the version numbering
set_property
(
TARGET MathFunctions PROPERTY VERSION
"1.0.0"
)
set_property
(
TARGET MathFunctions PROPERTY SOVERSION
"1"
)
install
(
TARGETS MathFunctions
DESTINATION lib
EXPORT MathFunctionsTargets
)
install
(
FILES MathFunctions.h DESTINATION include
)
Tests/Tutorial/Complete/MathFunctions/MakeTable.cxx
0 → 100644
View file @
f2ddedfa
// A simple program that builds a sqrt table
#include <cmath>
#include <fstream>
#include <iostream>
int
main
(
int
argc
,
char
*
argv
[])
{
// make sure we have enough arguments
if
(
argc
<
2
)
{
return
1
;
}
std
::
ofstream
fout
(
argv
[
1
],
std
::
ios_base
::
out
);
const
bool
fileOpen
=
fout
.
is_open
();
if
(
fileOpen
)
{
fout
<<
"double sqrtTable[] = {"
<<
std
::
endl
;
for
(
int
i
=
0
;
i
<
10
;
++
i
)
{
fout
<<
sqrt
(
static_cast
<
double
>
(
i
))
<<
","
<<
std
::
endl
;
}
// close the table with a zero
fout
<<
"0};"
<<
std
::
endl
;
fout
.
close
();
}
return
fileOpen
?
0
:
1
;
// return 0 if wrote the file
}
Tests/Tutorial/Complete/MathFunctions/MathFunctions.cxx
0 → 100644
View file @
f2ddedfa
#include "MathFunctions.h"
#include <cmath>
#ifdef USE_MYMATH
# include "mysqrt.h"
#endif
namespace
mathfunctions
{
double
sqrt
(
double
x
)
{
#ifdef USE_MYMATH
return
detail
::
mysqrt
(
x
);
#else
return
std
::
sqrt
(
x
);
#endif
}
}
Tests/Tutorial/Complete/MathFunctions/MathFunctions.h
0 → 100644
View file @
f2ddedfa
#if defined(_WIN32)
# if defined(EXPORTING_MYMATH)
# define DECLSPEC __declspec(dllexport)
# else
# define DECLSPEC __declspec(dllimport)
# endif
#else // non windows
# define DECLSPEC
#endif
namespace
mathfunctions
{
double
DECLSPEC
sqrt
(
double
x
);
}
Tests/Tutorial/Complete/MathFunctions/mysqrt.cxx
0 → 100644
View file @
f2ddedfa
#include "MathFunctions.h"
#include <iostream>
// include the generated table
#include "Table.h"
#include <cmath>
namespace
mathfunctions
{
namespace
detail
{
// a hack square root calculation using simple operations
double
mysqrt
(
double
x
)
{
if
(
x
<=
0
)
{
return
0
;
}
// if we have both log and exp then use them
#if defined(HAVE_LOG) && defined(HAVE_EXP)
double
result
=
exp
(
log
(
x
)
*
0.5
);
std
::
cout
<<
"Computing sqrt of "
<<
x
<<
" to be "
<<
result
<<
" using log"
<<
std
::
endl
;
#else
// use the table to help find an initial value
double
result
=
x
;
if
(
x
>=
1
&&
x
<
10
)
{
result
=
sqrtTable
[
static_cast
<
int
>
(
x
)];
}
// if we have both log and exp then use them
// do ten iterations
for
(
int
i
=
0
;
i
<
10
;
++
i
)
{
if
(
result
<=
0
)
{
result
=
0.1
;
}
double
delta
=
x
-
(
result
*
result
);
result
=
result
+
0.5
*
delta
/
result
;
std
::
cout
<<
"Computing sqrt of "
<<
x
<<
" to be "
<<
result
<<
std
::
endl
;
}
#endif
return
result
;
}
}
}
Tests/Tutorial/Complete/MathFunctions/mysqrt.h
0 → 100644
View file @
f2ddedfa
namespace
mathfunctions
{
namespace
detail
{
double
mysqrt
(
double
x
);
}
}
Tests/Tutorial/Complete/TutorialConfig.h.in
0 → 100644
View file @
f2ddedfa
// the configured version number
#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@
#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
Tests/Tutorial/Complete/tutorial.cxx
0 → 100644
View file @
f2ddedfa
// A simple program that computes the square root of a number
#include <iostream>
#include <sstream>
#include <string>
#include "MathFunctions.h"
#include "TutorialConfig.h"
int
main
(
int
argc
,
char
*
argv
[])
{
if
(
argc
<
2
)
{
std
::
cout
<<
argv
[
0
]
<<
" Version "
<<
Tutorial_VERSION_MAJOR
<<
"."
<<
Tutorial_VERSION_MAJOR
<<
std
::
endl
;
std
::
cout
<<
"Usage: "
<<
argv
[
0
]
<<
" number"
<<
std
::
endl
;
return
1
;
}
double
inputValue
=
std
::
stod
(
argv
[
1
]);
const
double
outputValue
=
mathfunctions
::
sqrt
(
inputValue
);
std
::
cout
<<
"The square root of "
<<
inputValue
<<
" is "
<<
outputValue
<<
std
::
endl
;
return
0
;
}
Tests/Tutorial/Consumer/CMakeLists.txt
0 → 100644
View file @
f2ddedfa
cmake_minimum_required
(
VERSION 3.3
)
if
(
NOT DEFINED CMAKE_CXX_STANDARD
)
set
(
CMAKE_CXX_STANDARD 11
)
set
(
CMAKE_CXX_STANDARD_REQUIRED True
)
endif
()
function
(
find_external_dependency name
)
set
(
${
name
}
_ROOT
""
CACHE PATH
"Root directory to find
${
name
}
"
)
mark_as_advanced
(
${
name
}
_DIR
)
find_package
(
${
name
}
PATHS
${${
name
}
_ROOT
}
REQUIRED
)
endfunction
()
project
(
Consumer
)
find_external_dependency
(
MathFunctions
)
add_library
(
consumer consumer.cxx
)
target_link_libraries
(
consumer PUBLIC MathFunctions
)
# install the consumer library
install
(
TARGETS consumer DESTINATION bin EXPORT ConsumerTargets
)
# install the configuration targets
install
(
EXPORT ConsumerTargets
FILE ConsumerTargets.cmake
DESTINATION lib/cmake/Consumer
)
include
(
CMakePackageConfigHelpers
)
# generate the config file that is includes the exports
configure_package_config_file
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/Config.cmake.in
"
${
CMAKE_CURRENT_BINARY_DIR
}
/ConsumerConfig.cmake"
INSTALL_DESTINATION
"lib/cmake/example"
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
# install the configuration file
install
(
FILES
${
CMAKE_CURRENT_BINARY_DIR
}
/ConsumerConfig.cmake
DESTINATION lib/cmake/Consumer
)
# generate the export targets for the build tree
# needs to be after the install(TARGETS ) command
export
(
EXPORT ConsumerTargets
FILE
"
${
CMAKE_CURRENT_BINARY_DIR
}
/ConsumerTargets.cmake"
)
Tests/Tutorial/Consumer/Config.cmake.in
0 → 100644
View file @
f2ddedfa
@PACKAGE_INIT@
include(CMakeFindDependencyMacro)
function(find_external_dependency name)
set(${name}_ROOT "" CACHE PATH "Root directory to find ${name}")
mark_as_advanced(${name}_DIR)
find_dependency(${name} PATHS ${${name}_ROOT} REQUIRED)
endfunction()
find_external_dependency(MathFunctions)
include ( "${CMAKE_CURRENT_LIST_DIR}/ConsumerTargets.cmake" )
Tests/Tutorial/Consumer/consumer.cxx
0 → 100644
View file @
f2ddedfa
// A simple function that computes the square root of a number
#include <iostream>
#include <sstream>
#include <string>
#include "MathFunctions.h"
double
string_square_root
(
std
::
string
const
&
value
)
{
return
mathfunctions
::
sqrt
(
std
::
stod
(
value
));
}
Tests/Tutorial/Consumer/directions.txt
0 → 100644
View file @
f2ddedfa
# Import a CMake Project#
This examples shows how a project can find other CMake packages that
generated Config.cmake files.
It also shows how to state a projects external dependencies when generating a Config.cmake.
Tests/Tutorial/MultiPackage/CMakeLists.txt
0 → 100644
View file @
f2ddedfa
cmake_minimum_required
(
VERSION 3.3
)
project
(
Tutorial
)
# control how we mark up Debug libraries compared to Release libraries
set
(
CMAKE_DEBUG_POSTFIX
"-d"
)
# control where the static and shared libraries are built so that on windows
# we don't need to tinker with the path to run the executable
set
(
CMAKE_ARCHIVE_OUTPUT_DIRECTORY
"
${
PROJECT_BINARY_DIR
}
"
)
set
(
CMAKE_LIBRARY_OUTPUT_DIRECTORY
"
${
PROJECT_BINARY_DIR
}
"
)
option
(
BUILD_SHARED_LIBS
"Build using shared libraries"
ON
)
# the version number.
set
(
Tutorial_VERSION_MAJOR 1
)
set
(
Tutorial_VERSION_MINOR 0
)
# configure a header file to pass the version number only
configure_file
(
"
${
PROJECT_SOURCE_DIR
}
/TutorialConfig.h.in"
"
${
PROJECT_BINARY_DIR
}
/TutorialConfig.h"
)
# add the MathFunctions library
add_subdirectory
(
MathFunctions
)
# add the executable
add_executable
(
Tutorial tutorial.cxx
)
target_link_libraries
(
Tutorial MathFunctions
)
# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
target_include_directories
(
Tutorial PUBLIC
"
${
PROJECT_BINARY_DIR
}
"
)
# add the install targets
install
(
TARGETS Tutorial DESTINATION bin
)
install
(
FILES
"
${
PROJECT_BINARY_DIR
}
/TutorialConfig.h"
DESTINATION include
)
# enable testing
enable_testing
()
# does the application run
add_test
(
NAME Runs COMMAND Tutorial 25
)
# does the usage message work?
add_test
(
NAME Usage COMMAND Tutorial
)
set_tests_properties
(
Usage
PROPERTIES PASS_REGULAR_EXPRESSION
"Usage:.*number"
)
# define a function to simplify adding tests
function
(
do_test target arg result
)
add_test
(
NAME Comp
${
arg
}
COMMAND
${
target
}
${
arg
}
)
set_tests_properties
(
Comp
${
arg
}
PROPERTIES PASS_REGULAR_EXPRESSION
${
result
}
)
endfunction
(
do_test
)
# do a bunch of result based tests
do_test
(
Tutorial 4
"4 is 2"
)
do_test
(
Tutorial 9
"9 is 3"
)
do_test
(
Tutorial 5
"5 is 2.236"
)
do_test
(
Tutorial 7
"7 is 2.645"
)
do_test
(
Tutorial 25
"25 is 5"
)
do_test
(
Tutorial -25
"-25 is [-nan|nan|0]"
)
do_test
(
Tutorial 0.0001
"0.0001 is 0.01"
)
include
(
InstallRequiredSystemLibraries
)
set
(
CPACK_RESOURCE_FILE_LICENSE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/License.txt"
)
set
(
CPACK_PACKAGE_VERSION_MAJOR
"
${
Tutorial_VERSION_MAJOR
}
"
)
set
(
CPACK_PACKAGE_VERSION_MINOR
"
${
Tutorial_VERSION_MINOR
}
"
)
include
(
CPack
)
# install the configuration targets
install
(
EXPORT MathFunctionsTargets
FILE MathFunctionsTargets.cmake
DESTINATION lib/cmake/MathFunctions
)
include
(
CMakePackageConfigHelpers
)
# generate the config file that is includes the exports
configure_package_config_file
(
${
CMAKE_CURRENT_SOURCE_DIR
}
/Config.cmake.in
"
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsConfig.cmake"
INSTALL_DESTINATION
"lib/cmake/example"
NO_SET_AND_CHECK_MACRO
NO_CHECK_REQUIRED_COMPONENTS_MACRO
)
# generate the version file for the config file
write_basic_package_version_file
(
"
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsConfigVersion.cmake"
VERSION
"
${
Tutorial_VERSION_MAJOR
}
.
${
Tutorial_VERSION_MINOR
}
"
COMPATIBILITY AnyNewerVersion
)
# install the configuration file
install
(
FILES
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsConfig.cmake
DESTINATION lib/cmake/MathFunctions
)
# generate the export targets for the build tree
# needs to be after the install(TARGETS ) command
export
(
EXPORT MathFunctionsTargets
FILE
"
${
CMAKE_CURRENT_BINARY_DIR
}
/MathFunctionsTargets.cmake"
)
Tests/Tutorial/MultiPackage/Config.cmake.in
0 → 100644
View file @
f2ddedfa
@PACKAGE_INIT@
include ( "${CMAKE_CURRENT_LIST_DIR}/MathFunctionsTargets.cmake" )
Tests/Tutorial/MultiPackage/License.txt
0 → 100644
View file @
f2ddedfa
This is the open source License.txt file introduced in
CMake/Tutorial/Step7...
Tests/Tutorial/MultiPackage/MathFunctions/CMakeLists.txt
0 → 100644
View file @
f2ddedfa
# add the library that runs
add_library
(
MathFunctions MathFunctions.cxx
)
# state that anybody linking to us needs to include the current source dir
# to find MathFunctions.h, while we don't.
target_include_directories
(
MathFunctions
INTERFACE
$<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
>
$<INSTALL_INTERFACE:include>
)
# should we use our own math functions
option
(
USE_MYMATH
"Use tutorial provided math implementation"
ON
)
if
(
USE_MYMATH
)
# does this system provide the log and exp functions?
include
(
CheckSymbolExists
)
set
(
CMAKE_REQUIRED_LIBRARIES
"m"
)
check_symbol_exists
(
log
"math.h"
HAVE_LOG
)
check_symbol_exists
(
exp
"math.h"
HAVE_EXP
)
# first we add the executable that generates the table
add_executable
(
MakeTable MakeTable.cxx
)
# add the command to generate the source code
add_custom_command
(
OUTPUT
${
CMAKE_CURRENT_BINARY_DIR
}
/Table.h
COMMAND MakeTable
${
CMAKE_CURRENT_BINARY_DIR
}
/Table.h
DEPENDS MakeTable
)
# library that just does sqrt
add_library
(
SqrtLibrary STATIC
mysqrt.cxx
${
CMAKE_CURRENT_BINARY_DIR
}
/Table.h
)
# state that we depend on our binary dir to find Table.h
target_include_directories
(
SqrtLibrary PRIVATE
${
CMAKE_CURRENT_BINARY_DIR
}
)
set_target_properties
(
SqrtLibrary PROPERTIES
POSITION_INDEPENDENT_CODE
${
BUILD_SHARED_LIBS
}
)
target_compile_definitions
(
SqrtLibrary PRIVATE
"$<$<BOOL:
${
HAVE_LOG
}
>:HAVE_LOG>"
"$<$<BOOL:
${
HAVE_EXP
}
>:HAVE_EXP>"
)
target_link_libraries
(
MathFunctions PRIVATE SqrtLibrary
)
endif
()
target_compile_definitions
(
MathFunctions PRIVATE
"$<$<BOOL:
${
USE_MYMATH
}
>:USE_MYMATH>"
)
# define the symbol stating we are using the declspec(dllexport) when
# building on windows
target_compile_definitions
(
MathFunctions PRIVATE
"EXPORTING_MYMATH"
)
# setup the version numbering
set_property
(
TARGET MathFunctions PROPERTY VERSION
"1.0.0"
)
set_property
(
TARGET MathFunctions PROPERTY SOVERSION
"1"
)
install
(
TARGETS MathFunctions
DESTINATION lib
EXPORT MathFunctionsTargets
)
install
(
FILES MathFunctions.h DESTINATION include
)
Tests/Tutorial/MultiPackage/MathFunctions/MakeTable.cxx
0 → 100644
View file @
f2ddedfa
// A simple program that builds a sqrt table
#include <cmath>
#include <fstream>
#include <iostream>
int
main
(
int
argc
,
char
*
argv
[])
{
// make sure we have enough arguments
if
(
argc
<
2
)
{
return
1
;
}
std
::
ofstream
fout
(
argv
[
1
],
std
::
ios_base
::
out
);
const
bool
fileOpen
=
fout
.
is_open
();
if
(
fileOpen
)
{
fout
<<
"double sqrtTable[] = {"
<<
std
::
endl
;
for
(
int
i
=
0
;
i
<
10
;
++
i
)
{