Getting started with CMake
+==========================
+
+[For Windows build instructions see README.msvc]
(These instructions apply to Unix-like systems, including Cygwin and Mac. To
build using Visual Studio or some other IDE supported by CMake, most of the
code (eg, from Git) is at /home/curt/projects/flightgear, you might create
/home/curt/projects/fgbuild. Change into the new directory, and run
- cmake ../flightger
-
+ cmake ../flightgear
+
To generate standard Unix Makefiles in fgbuild.
Probably you want to specify an install prefix:
By default, we select a release build. To create a debug build, use
cmake ../flightgear -DCMAKE_BUILD_TYPE=Debug
-
+
(or MinSizeRel, or RelWithDbg)
Debug builds will automatically use corresponding debug builds of required
To set an optional feature, do
- cmake ../flightgear -DFEATURE_NAME=ON
+ cmake ../flightgear -DFEATURE_NAME=ON
(or 'OFF' to disable )
To see the variables that can be configured / are currently defined, you can
run one of the GUI front ends, or the following command:
- cmake ../flighgear -L
+ cmake ../flightgear -L
Add 'A' to see all the options (including advanced options), or 'H' to see
the help for each option (similar to running configure --help under autoconf):
cmake ../flightgear -LH
+
Build Targets
+=============
For a Unix makefile build, 'make dist', 'make uninstall' and 'make test' are
all available and should work as expected. 'make clean' is also as normal,
inside an if() test, for example:
if(APPLE)
- list(APPEND SOURCES extraFile1.cxx extraFile2.cxx)
+ list(APPEND SOURCES extraFile1.cxx extraFile2.cxx)
endif()
Setting include directories
set_target_property(fgfs PROPERTIES
COMPILE_DEFINITIONS FOO BAR=1)
-
+
You can set a property on an individual source file:
set_property(SOURCE myfile.cxx PROPERTY COMPILE_FLAGS "-Wno-unsigned-compare")
-
+
Detecting Features / Libraries
For most standard libraries (Gtk, wxWidget, Python, GDAL, Qt, libXml, Boost),
In the root CMakeLists file, use a statement like:
find_package(OpenGL REQUIRED)
-
+
Each package helper sets various variables such aaa_FOUND, aaa_INCLUDE_DIR,
and aaa_LIBRARY. Depending on the complexity of the package, these variables
might have different names (eg, OPENSCENEGRAPH_LIBRARIES).
Note libraries support by pkg-config can be handled directly, with no need
to create a custom FindABC helper.
-
+
Adding a new executable target
add_executable(myexecutable ${SOURCES} ${HEADERS})
target_link_libraries(myexecutable .... libraries ... )
install(TARGETS myexecutable RUNTIME DESTINATION bin)
-
+
(If the executable should not be installed, omit the final line above)
If you add an additional line
add_test(testname ${EXECUTABLE_OUTPUT_PATH}/myexecutable)
-
+
Then running 'make test' will run your executable as a unit test. The
executable should return either a success or failure result code.
+