CMakeLists.txt -> File in each directory that contains classes, exe, etc
CMakeLists.txt contains the following:
# build targets
WIN32_SOURCE_FILES =
UNIX_SOURCE_FILES =
ABSTRACT_CLASSES =
SUBDIRS =
EXECUTABLES =
# make flags
# make flags can use these varibles:
# ${CMAKE_BINARY_DIR} The root of the build tree where the binaries are
# ${CMAKE_SOURCE_ROOT} The root of the source tree where configure is
INCLUDE_DIRECTORIES =
LINK_DIRECTORIES =
LINK_LIBRARIES = # use the same name as ME =
WIN32_LIBRARIES =
UNIX_LIBRARIES =
# name of the library to build
ME =
# add make commands
BEGIN MAKE VERBATIM
... # copy stuff into CMakeTargets.make directly
LOCAL_BUILD_TARGETS = // These are done first before anything else
END MAKE VERBATIM
AUX_SOURCE_DIR =
Windows / Visual Studio 6.0 programs
CMakeSetup.exe -> window MFC based GUI for configure on windows
CMakeSetupCMD.exe -> windows command line version of CMakeConfigure
To Build on Windows:
load CMake/Source/CMakeSetup.dsw
Build it
Run it
Specify paths
Load ITK.dsw
Build Common, Numerics, then any of the many executables, or do a Batch build
with debug only.
Unix scripts and programs:
configure -> run on unix to configure for build
CMakeBuildTargets -> Unix program to read CMakeLists.txt and generate CMakeTargets.make
makefile fragments:
CMakeMaster.make -> main file to be included by makefiles
CMakeVariables.make -> all make varibles are set in this file
CMakeRules.make -> All build rules are here (except Simple Rules)
CMakeSimpleRules.make -> simple build rules for .o to .cxx, this is separate to be able
to build CMakeBuildTargets itself.
CMakeLocal.make -> Place for hand configuration
CMakeTargets.make -> generated rules for make style build in each directory
MakefileTemplate.make -> master makefile template used by configure to generate Makefiles
Note on adding targets inside "BEGIN/END MAKE VERBATIM" lines:
By default, after "includ"ing a makefile, make will attempt to bring
that included file up to date. So, when you first run configure, your
makefiles will _not_ contain the target you have asked for inside the
VERBATIM tags. However, it will be added by CMake when make attempts
to bring the included make files up to date. NOTE: this will make
your head hurt if you think about it too long. Just accept that it
works to ask for a build target that does not yet exist.
Unix install:
In place:
./configure
make
Other directory:
mkdir Insight-build
cd Insight-build
../Insight/configure
make
TODO:
FEATURES:
Add include and directories to the build on windows.
For unix just add them to the CMakeLocal.make.in
Add a --with idea, sets a #define in the config.h file
Create a directory
Run a command
CLEANUP:
Change ME to LIBRARY, and add PROJECT=
Remove the rest of the ITK_* stuff
move the libs used from the top into the testing...
FEATURES
1. run a command in the current build directory
2. make a directory
3. search for 3rd party software and define some variables
that can be used in the CMakeLists.txt files. Perhaps from
some central CMake.in file.
4. Have cmake define some stuff like:
SITE, OS-REV, COMPILER-VERSION
(use configure for unix, and add stuff to the pc version for windows.)
BUGS:
1. allow multiple registry entries on windows