125 lines
3.5 KiB
Plaintext
125 lines
3.5 KiB
Plaintext
WELCOME TO CROSS-PLATFORM MAKE
|
|
|
|
CMake is a cross-platform, extensible build environment. It currently generates
|
|
Unix makefiles and Microsoft Visual C++ projects/workspaces.
|
|
|
|
To use CMake, create CMakeLists.txt in each directory that makes up your
|
|
source repository. The CMakeLists.txt contains rules. Each rule does something
|
|
different, like defines a list of source code, include directories, etc. Once
|
|
CMake has processed all the rules in all the CMakeLists.txt files, it generates
|
|
the appropriate "makefile(s)" for the system/compiler that you are on.
|
|
|
|
THE BOOK OF RULES
|
|
The key to using CMake is to learn the rules. Each rule has the same format:
|
|
|
|
NAME_OF_RULE(args....)
|
|
|
|
where args is a white-space separated listed of arguments. (Arguments
|
|
containing spaces should be quoted. For example:
|
|
|
|
INCLUDE_DIRECTORIES(./ d:/include "c:/Program Files/include")
|
|
|
|
note that Unix-style slashes are used.
|
|
|
|
Here are the important rules.
|
|
|
|
# build targets
|
|
WIN32_SOURCE_FILES(file1 file2 ...)
|
|
|
|
UNIX_SOURCE_FILES()
|
|
|
|
ABSTRACT_CLASSES(class1 class2 ...)
|
|
|
|
SUBDIRS()
|
|
|
|
EXECUTABLES()
|
|
|
|
# name of the library to build
|
|
LIBRARY(library_name)
|
|
|
|
# make flags
|
|
# make flags can use these variables:
|
|
# ${CMAKE_BINARY_DIR} The root of the build tree where the binaries are
|
|
# ${CMAKE_SOURCE_DIR} The root of the source tree where configure is
|
|
|
|
INCLUDE_DIRECTORIES()
|
|
|
|
LINK_DIRECTORIES()
|
|
|
|
LINK_LIBRARIES() = # use the same name as the LIBRARY() rule specified
|
|
WIN32_LIBRARIES()
|
|
UNIX_LIBRARIES()
|
|
|
|
# define other targtes/source directories
|
|
AUX_SOURCE_DIR(dir1 dir2 ...)
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|