CMake: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
(Replace content with link to new CMake community wiki)
 
(45 intermediate revisions by 18 users not shown)
Line 1: Line 1:
http://www.cmake.org/cmake/img/CMake-logo-download.jpg
{{CMake/Template/Moved}}


<!-- documentation manual man information help tutorial -->
This page has moved [https://gitlab.kitware.com/cmake/community/wikis/Home here].
Welcome to CMake, the cross-platform, open-source make system. CMake is used to control the software compilation process using simple platform and compiler independent configuration files. CMake generates native makefiles and workspaces that can be used in the compiler environment of your choice. CMake is quite sophisticated: it is possible to support complex environments requiring system configuration, pre-processor generation, code generation, and template instantiation.
 
You will find here not only documentation for CMake, but also for CPack and CTest.
=CMake=
 
==Primary Resources - Look here first! ==
* Where can I [http://www.cmake.org/HTML/Download.html download CMake]?
* [http://www.cmake.org/HTML/Documentation.html CMake Documentation]
* [[CMake Useful Variables|Useful CMake Variables]]
* [[CMake FAQ| FAQ (Frequently asked questions)]]
* [http://www.cmake.org/mailman/listinfo/cmake CMake Mailing List] (for searchable archives see [[CMake_FAQ#Where_can_I_find_searchable_CMake_Mailing_Archives | CMake FAQ ]])
* [[CMake_2.6_Notes|CMake 2.6 Notes]]
* ''Getting Started With CMake'' Screencasts @[http://playcontrol.net/ewing/screencasts/getting_started_with_cmake_.html PlayControl.net]
 
==Development Topics==
* [[CMake Cross Compiling| Cross compiling]]
* [[CMake RPATH handling|RPATH handling]]
* [[CMake/Assembler|Assembler Support]]
* [[CMake Editors Support|Editors/IDEs with CMake syntax support]]
* [[CMake Generator Specific Information|Docs for Specific Project Generators]] (Eclipse, KDevelop3, CodeBlocks, Makefile)
* [[CMake User Contributed Macros| Contributed macros]]
* [[CMake:Module Maintainers|Module Maintainers]]
* [[CMake Platform Dependent Issues|Platform Dependent Information]]
* [[CMake Released Versions|Documentation for previous releases]]
* [[CMake Version Compatibility Matrix|Matrix for checking backwards-compatibility of current features]]
 
==Tutorials==
 
===Basic Introductions===
* [http://www.cmake.org/HTML/Examples.html A Simple CMake Example]
* [http://www.linuxjournal.com/article/6700 Cross-Platform Software Development Using CMake]
* [http://clubjuggler.livejournal.com/138364.html CMake: The Cross Platform Build System]
* [http://www.elpauer.org/stuff/learning_cmake.pdf "Learning CMake"] - Slides of a CMake workshop, including CPack, CTest and CDash
* [http://www.visgraf.impa.br/seminar/slides/rodlima_cmake_presentation.pdf "CMake: Behind the Scenes of Code Development"] - Slides of an introductory talk/tutorial about CMake and its benefits
* [http://snikt.net/index.php/2010/04/01/howto-use-cmake-with-cc-projects Howto use cmake with C/C++ projects] A simple walk-through about creating a cmake C project including integration of subversion, doxygen and how-to add optional project parts as configurables
* [http://hackerwithin.org/thw/plugin_wiki/page/buildsystems The Hacker Within: Build Systems] Explains why and how to use build systems with a CMake example.
* Syntax of the CMake language
** [http://www.cmake.org/HTML/syntax.html A quick introduction to CMake syntax]
** [[CMake/Language Syntax | Language syntax]] (wiki page)
** [[CMake:VariablesListsStrings| On variables, lists, strings, maps, regexps, etc.]]
* How CMake simplifies the build process by Bruno Abinader
** [http://cabledogs.org/abinader/2009/12/07/how-cmake-simplifies-the-build-process-part-1-basic-build-system/ Part 1 - Basic build system]
** [http://cabledogs.org/abinader/2009/12/09/how-cmake-simplifies-the-build-process-part-2-advanced-build-system/ Part 2 - Advanced build system]
* [http://rachid.koucha.free.fr/tech_corner/cmake_manual.html Empirical approach to CMAKE] by Rachid Koucha
 
===Finding stuff and platform checking===
 
* [[CMake HowToDoPlatformChecks| How to write platform checks with CMake]]<br>Describes how to implement platform or configure checks with CMake.
 
* [[CMake/Tutorials#CMake_Packages|How to package your project for use by others]], create FooConfig.cmake files, and exporting and importing targets.
 
* [[CMake:How_To_Find_Libraries | How to find libraries]] <br>Describes how to use external libraries in a CMake project and how to write your own find modules for libraries that don't already have one.
 
* [[CMake:HowToUseExistingOSXFrameworks | How to find and use existing frameworks on OS X]]<br> A quick example to help OS X users find frameworks automatically.
 
===How to use CMake with specific Libraries ===
 
* [[CMake:How To Build Qt4 Software | How to build Qt4 software with CMake]]
 
* [http://qtnode.net/wiki?title=Qt_with_cmake Qt with CMake] <br>Explains how to use CMake to build software with Qt4, Qt3 and KDE3.
 
* [[CMake:How To Build KDE4 Software | How to build KDE4 software with CMake]]
 
* [[CMake:MatlabMex | How to use CMake to create Matlab MEX files]] <br> Describes how to use CMake when developing Matlab Executable (MEX) files for use with The Mathworks Matlab scripting language.
 
* [http://www.wxwidgets.org/wiki/index.php/CMake How to use CMake for building software with wxWidgets ]
 
* [http://www.linuxdevices.com/articles/AT6762290643.html Building eCos applications with CMake]
 
* [[CMakeForFLTK| Using CMake to build an FLTK application]]
 
===Recipes===
 
* [[CMake:How To Process Lots Of Input Files | How to process lots of input files with a processor built by CMake]]
 
* [[BuildingWinDLL| How to export symbols from a Windows DLL for the non-Windows Developer]]
 
* [[VSConfigSpecificSettings| Configuration Specific Settings for Visual Studio Generated Project Files]]
 
* [[BundleUtilitiesExample| How to use the 'BundleUtilities' to deploy your OS X Application. Example uses Qt 4.]]
 
* [[CMakeForFortranExample|How to write a simple CMakeLists.txt for Fortran code]]
 
* [[CMakeEmulateMakeCheck|How to emulate GNU Autotools 'make check']]
 
* [[CustomCommandCustomTargetInstall|A toy model for add_custom_command and add_custom_target]]
 
* [[CMake:OSX_InterfaceBuilderFiles|Working with OS X Interface Builder Files]]
 
* [[RecipeAppendVersionNumberToInstallpath|Append the Version Number to the Install path]]
 
* [[RecipeInstallToALocalFolderForTesting|Install to a local folder in the build dir for testing]]
 
* [[RecipeAddUninstallTarget|Adding an uninstall target to your project]]
 
* [[RecipeAddSoVersionToDLLs|Appending the SO version to DLLs]]
 
==Converters from other buildsystems to CMake==
 
All converters listed here are not "complete", i.e. the generated CMake files are not 100% finished, in all cases some work is left for the developer.
 
====automake/autotools/autoconf====
* [http://websvn.kde.org/trunk/KDE/kdesdk/cmake/scripts/ am2cmake (requires Ruby) ] Converts automake/autotools/libtool based projects to CMake, specialized in converting from KDE 3 to KDE 4, should also work for others. This one has been used for converting the KDE buildsystem to CMake.
 
* [http://emanuelgreisen.dk/stuff/kdevelop_am2cmake.php.tgz Alternative Automake2CMake (requires PHP)] Converts KDevelop projects that use automake to CMake.
 
* [[GccXmlAutoConfHints|Converting autoconf tests]]
 
====qmake====
* [[CMake:ConvertFromQmake | qmake converter (requires Ruby)]] Converts projects that use Qt's qmake.
 
====Visual Studio====
* [http://vcproj2cmake.sf.net vcproj2cmake.rb (requires Ruby) SourceForge project] Creates '''and maintains''' CMakeLists.txt files by extracting info from Visual Studio project files. Elaborate script for development side-by-side the updated original static .vcproj files, supports script hooks and powerful definition mappings. Patches and new project members very welcome. Older script versions below:
** [http://www.eskilson.se/vcproj2cmake.rb Original vcproj2cmake.rb version (requires Ruby)]
** Slightly newer version here [http://dgwarp.hd.free.fr/vcproj2cmake.rb vcproj2cmake.rb], see:[[User_talk:Dweeves]] for details
* [http://nberserk.wordpress.com/2010/11/25/vcproj2cmakelist/ vcproj2cmake.ps1(PowerShell version)] Creates CMakeLists.txt. it supports vcproj configuration and detect 'exclude from build' option
* [http://sourceforge.net/projects/folders4cmake/ folders4cmake (requires Java)] Use Visual Studio project files to generate corresponding "source_group" information that you can use inside your own CMake scripts. Supports Visual Studio 9/10 project files (full round-trip possible).
 
====Basic CMakeLists.txt from-scratch-generator====
* [http://websvn.kde.org/trunk/KDE/kdesdk/cmake/scripts/ gencmake (requires Ruby) ] Creates basic CMakeLists.txt files from looking at the existing files.
* [http://www.vanvelzensoftware.com/postnuke/index.php?name=Downloads&req=viewdownload&cid=7 CMakeListGenerator (Win32) ] Creates complete CMakeLists.txt files as described in the [https://gucef.svn.sourceforge.net/svnroot/gucef/trunk/tools/CMakeListGenerator/docs/README.txt README ] using a combination of file and directory structure analysis. Supports resolving dependencies between multiple archives.
 
==Success Stories==
 
* What are some [[CMake Projects|projects using CMake]]?
* [[CMake:Articles|Articles about CMake]]
* [[Really Cool CMake Features]]
 
 
==More Topics==
 
* [[CMake Fortran Issues|Fortran Issues]]
* [[CMake:For CMake Hackers|Generating dependency graphs with CMake]]
* [[CMake:Experiments With Lua|Experiments With Lua]]
* [[CMake Performance Tips|Performance Tips]]
* [[CMake:Install Commands| Replacing deprecated INSTALL_FILES, INSTALL_PROGRAMS and INSTALL_TARGETS commands]]
* [[CMake:GNU style example | GNU style directory layout with CMake]]
* [[http://www.darraslaw.com/ disability benefits law]]
* [[CMake:OpenTasks| CMake TODO]]
* [[CMake:CreateQtAssistantDocs| Creating Qt Assistant Docs]]
* [[CMake:Static libraries| Writing FindXXX.cmake modules that work with static libraries]]
* [[CMake:Multiple versions| Writing FindXXX.cmake modules that work when multiple versions of packages are installed]]
* [[CMake:Improving Find* Modules ]]
* [[/C Plugins for Loadable Commands/]]<br>For anyone who wonders what the <tt>load_command</tt> command is for.
* [[PC-Lint]] support for CMake
 
=CTest=
 
===Tutorials===
* [[CMake Testing With CTest|Testing With CTest]]<br>Introduces to testing with CTest, submitting dashboards, and using CMake to add tests to the test system.
 
* [[CMake Scripting Of CTest|CTest Scripting]]<br>Describes the scripting with CTest which can significantly simplify and automate testing and submitting dashboards.
 
* [[CMake Generating Testing Files|Generating Input Files For CTest]]<br>Describe more in details the concepts behind testing with CTest and also explans how to use CTest without using CMake.
 
* [[CTest:Buildserver|Buildmanagement With CTest]]<br>Describes how to setup a central configuration for all CTest scripts.
 
===More Information===
* [[CTest:Submission Issues|Configuring CTest Submission Methods]]
* [[CTest:Nightly, Experimental, Continuous|CTest Nightly, Experimental, Continuous, ...]]
* [[CTest:Coverage]]
* [[Media:CTest Running Modes.pdf]]
* [[CTest:FAQ|CTest Frequently asked questions]]
 
===More Topics===
* [[CTest:OpenTasks| CTest TODO]]
* [[CTest:TestWithoutBuild| Run tests on machines without building first]]
 
=CDash=
* [http://public.kitware.com/Wiki/CDash CDash Wiki].
* [http://public.kitware.com/Wiki/CDash:FAQ CDash FAQ].
 
 
=CPack=
===Tutorials===
* [[CMake:Packaging With CPack|Packaging with CPack]]<br>Introduction to CPack, installing and packaging of software.
* [[CMake:CPackConfiguration|CPack Variables]]<br>
* [[CMake:CPackPackageGenerators|Supported package formats]]<br>
* [[CMake:CPackWin32NewbiesChecklist|CPack Win32 Newbie Checklist]] <br>
* [[CMake:Component_Install_With_CPack|Component Install With CPack]] <br>
 
===Recipes===
 
* [[RecipeAddShortcutToStartMenu|Add an application shortcut to the Start Menu]]
 
 
{{CMake/Template/Footer}}

Latest revision as of 15:40, 30 April 2018


The CMake community Wiki has moved to the Kitware GitLab Instance.

This page has moved here.