Step Autotools CMake Configure configure OPTIONS (see table 2) cmake. OPTIONS (see table 2) Build make make cmake -build. Test make check make test cmake -build.target test (Unix/Linux) cmake -build.target RUNTESTS (Windows) Install make install make install cmake -build.target install Table 1. The steps required to. Use Qt Creator cheat-sheet to speed up your Qt development. The Qt Creator reference card is a handy reference (cheat-sheet) designed to speed up your use of Qt Creator. It gives you keyboard shortcuts for Windows, Linux and Mac. (See also below for more from KDAB on Qt Creator). OverAPI.com is a site collecting all the cheatsheets,all!
from here: https://github.com/mortennobel/CMake-Cheatsheet
Quick example
Assume following source tree, where the source files in Features are to be compiled into a static library, which in turn is required by Application:
Then, create two CMake script files:
Features/CMakeLists.txt:
Application/CMakeLists.txt:
Finally, cd into Features and do:
Then, cd into Application and do the same.
This can be automated with a Makefile:
A more advanced example
Here we have a library with multiple targets: the library itself and two example applications that use the library.
All targets in one CMake script:
Advanced Makefile
solution CMakeLists.txt
reference
dependence between targets
execute pre-build commands
execute post-build commands
for Qt projects
at the request of a friend i’ve decided to dump some of my basic cmake knowledge. this isinformation i’ve picked up from supercollider, personal projects, and tutorial videos, but itdoesn’t seem to be immediately accessible unless you know what you’re looking for.
for each bit i’ll be using the most recent notation available, as far as i know it. i’m alsointentionally keeping this post short so it can serve as a cheat sheet - that’s why, for instance,i’m not listing every possible compiler id or command variation.
contents:
config and build steps
most usage of cmake will consist of two types of commands: configuration and building. i don’t thinkthese are exactly the official names, but what i mean is:
compiler ids
Cmake Cheat Sheet Pdf
to figure out what compiler CMake is using, check CMAKE_CXX_COMPILER_ID
or use a<CXX_COMPILER_ID:Foo>
generator expression (see below)
compiler | id |
---|---|
gcc | GNU |
clang (LLVM) | Clang |
clang (Apple) - this is what comes with XCode | AppleClang |
msvc | MSVC |
icc | Intel |
build types
with CMake you can have several build types. the most important thing to know is that if you use anIDE project generator (like Visual Studio or XCode) you specify this in the build step, but forMakefiles you specify it in the config step.
Cmake Release O2
each build type passes different flags to your compiler. for some ungodly reason it’s hard to findout what those are, so i’m listing them here. the only other place i can find this is on a stackoverflow answer. these are the flags for AppleClang,others should be similar.
you can find out what they are for your compiler by creating a minimum CMake project, running cmake.
, and reading CMakeCache.txt.
Cmake Cheat Sheet
build type | what it means | flags (AppleClang, GCC) | flags (MSVC 2017) |
---|---|---|---|
None (empty) | you didn’t pass a build type to a makefile generator | /DWIN32 /D_WINDOWS /W3 /GR /EHsc | |
Debug | debug build, no optimization | -g | /MDd /Zi /Ob0 /Od /RTC1 |
Release | release build, full optimization | -O3 -DNDEBUG | /MD /O2 /Ob2 /DNDEBUG |
RelWithDebInfo | “release with debug info”. keeps debugging symbols and does optimization | -O2 -g -DNDEBUG | /MD /Zi /O2 /Ob1 /DNDEBUG |
MinSizeRel | “minimum size release”. optimized for small binary size | -Os -DNDEBUG | /MD /O1 /Ob1 /DNDEBUG |
the ‘none’ flags will be passed for all build types.
don’t develop on Windows and don’t know what those flags mean? Blackberry pearl 8100 program. i looked them up for you:
/DFOO
- defineFOO
in the preprocessor/EHsc
- catch C++ exceptions, assumeextern 'C'
functions never throw C++ exceptions/GR
- enable RTTI/MD
- make a multithreaded DLL/MDd
- make a debug multithreaded DLL/O1
- optimize for size/O2
- optimize for speed/Ob0
- no auto-inlining/Ob1
- only inline functions that are marked inline, and C++ member functions defined in a classdeclaration/Ob2
- let compiler inline freely/Od
- no optimization/RTC1
- run-time checking: report when a variable is used without being initialized, and stackframe run-time error checking. See theirsite for more details./W3
- use warning level 3 (out of 4), “production quality”/Zi
- generate “complete debugging information”, like-g
for clang/gcc
passing flags to the compiler or linker
sometimes you want to force a flag to be passed to the compiler or linker. while some compilersalso let you specify these using environment variables, other times you just want to test outwhether adding a flag does what you want it to do. the following configuration-step flags are goodfor that:
CMAKE_C_FLAGS
/CMAKE_CXX_FLAGS
- used by the compilerCMAKE_EXE_LINKER_FLAGS
- used by the linker when linking executablesCMAKE_SHARED_LINKER_FLAGS
- used by linker when linking shared object librariesCMAKE_MODULE_LINKER_FLAGS
- used by linker when linking modules (i don’t know what this means)CMAKE_STATIC_LINKER_FLAGS
- used by linker when linking static object libraries
you can also edit the cache directly to set these if you don’t want to go through an entireconfiguration step again.
you can also use the environment variables CFLAGS
, CXXFLAGS
, and LDFLAGS
, but those only workon the first configuration and are therefore useless in my opinion.
using boost
find_package
will take care of everything else for you: include directories, finding thelibraries, etc.
you can set some variables pre-command to configure what libs are linked. some of interest may be:
Boost_USE_MULTITHREADED
- ON by default, set to OFF to use non-multithreaded libsBoost_STATIC_LIBS
- OFF by default, set to ON to force-use static librariesBoost_DEBUG
- get debug output from thefind_package
command
adding tests
enable_testing| add_test| CTest manual
after building, you can now you can execute ctest
in the build directory to run the tests.
for a more sophisticated project you will want to hide this behind a flag so that end users don’thave to build your tests if they don’t want to.
setting compiler options
target_compile_definitions| target_compile_options
use target_compile_definitions
for preprocessor definitions, target_compile_options
for actualcompiler options.
these are close to real commands i’ve used:
using generator expressions
i think the docs here are quite good actually, and the list is too long to go over here. Microsoft word phone number templatedownload free apps.
generator expressions are fantastic; they let you succinctly write informational messages andconditional expressions. take the example i gave in the previous section:
Cmake Cheat Sheets
the inner expression evaluates to either 1 or 0, and a generic expression like $<X:STR>
will onlyevaulate to STR
if X
is 1. overall, this evaluates to the flag -Wno-psabi
iff the compiler isgcc; otherwise it evaluates to nothing.
this is a lot simpler and clearer than writing:
Cmake Cheat Sheet Download
note: unlike most of CMake, you can’t just coerce things on the left hand side of one of thesethings to true or false; it has to be exactly 0 or 1. there’s a special expression, $<BOOL:foo>
,for just that purpose.
setting the c++ standard
note: added in cmake 3.1.
Cmake Cheat Sheet Free
putting it all together
a sample cmake file for a project using the boost unit testing lib: