本文共 11142 字,大约阅读时间需要 37 分钟。
一 为什么使用CMake
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。总之很强大!
二 CMake安装
安装很简单
三 CMake基本使用和语法
1 |
|
command 是命令名,大小写无关(注意:变量是大小写相关的)
args 是参数,参数如果有空格,应该用双引号括起来
变量引用用${VAR}语法
set命令可以将多变量可以放在一起,合成为一个变量,如下所示
1 2 |
|
CMake可以直接获取系统环境变量和Windows注册值。为了获取系统环境变量,需要语法
1 |
|
四 CMake中的Hello World
CMakeLists.txt文件中
1 2 |
|
这只是最简单的版本,下面还有一个复杂一些的版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
五 Run Cmake
cd Hello
cmake ..
make
六 CMake帮助文档
安装完之后,进入/usr/share/cmake
目录形式如下
.├── completions├── editors│ ├── emacs│ └── vim├── Help│ ├── command│ ├── generator│ ├── include│ ├── manual│ ├── module│ ├── policy│ ├── prop_cache│ ├── prop_dir│ ├── prop_gbl│ ├── prop_inst│ ├── prop_sf│ ├── prop_test│ ├── prop_tgt│ ├── release│ └── variable├── include├── Modules│ ├── CMakeAddFortranSubdirectory│ ├── Compiler│ ├── CompilerId│ ├── FindCUDA│ ├── FortranCInterface│ │ └── Verify│ ├── IntelVSImplicitPath│ ├── Internal│ └── Platform└── Templates └── Windows
其中需要注意的是Help目录和Modules目录,Help目录为帮助文档,Modulues目录为find_package指令的查找目录之一。
cmake --help
我们可以查看cmake帮助,这个很全,比如显示cmake的指令
cmake --help-command-list
add_compile_optionsadd_custom_commandadd_custom_targetadd_definitionsadd_dependenciesadd_executableadd_libraryadd_subdirectoryadd_testaux_source_directorybreakbuild_commandbuild_namecmake_host_system_informationcmake_minimum_requiredcmake_policyconfigure_filecontinuecreate_test_sourcelistctest_buildctest_configurectest_coveragectest_empty_binary_directoryctest_memcheckctest_read_custom_filesctest_run_scriptctest_sleepctest_startctest_submitctest_testctest_updatectest_uploaddefine_propertyelseelseifenable_languageenable_testingendforeachendfunctionendifendmacroendwhileexec_programexecute_processexportexport_library_dependenciesfilefind_filefind_libraryfind_packagefind_pathfind_programfltk_wrap_uiforeachfunctionget_cmake_propertyget_directory_propertyget_filename_componentget_propertyget_source_file_propertyget_target_propertyget_test_propertyifincludeinclude_directoriesinclude_external_msprojectinclude_regular_expressioninstallinstall_filesinstall_programsinstall_targetslink_directorieslink_librarieslistload_cacheload_commandmacromake_directorymark_as_advancedmathmessageoptionoutput_required_filesprojectqt_wrap_cppqt_wrap_uiremoveremove_definitionsreturnseparate_argumentssetset_directory_propertiesset_propertyset_source_files_propertiesset_target_propertiesset_tests_propertiessite_namesource_groupstringsubdir_dependssubdirstarget_compile_definitionstarget_compile_featurestarget_compile_optionstarget_include_directoriestarget_link_librariestarget_sourcestry_compiletry_rununsetuse_mangled_mesautility_sourcevariable_requiresvariable_watchwhilewrite_file
再如cmake定义的变量
cmake --help-variable-list
_BINARY_DIR _SOURCE_DIR _VERSION _VERSION_MAJOR _VERSION_MINOR _VERSION_PATCH _VERSION_TWEAKAPPLEBORLANDBUILD_SHARED_LIBSCMAKE_ _POSTFIXCMAKE_ _ARCHIVE_APPENDCMAKE_ _ARCHIVE_CREATECMAKE_ _ARCHIVE_FINISHCMAKE_ _COMPILERCMAKE_ _COMPILER_ABICMAKE_ _COMPILER_EXTERNAL_TOOLCHAINCMAKE_ _COMPILER_IDCMAKE_ _COMPILER_LOADEDCMAKE_ _COMPILER_TARGETCMAKE_ _COMPILER_VERSIONCMAKE_ _COMPILE_OBJECTCMAKE_ _CREATE_SHARED_LIBRARYCMAKE_ _CREATE_SHARED_MODULECMAKE_ _CREATE_STATIC_LIBRARYCMAKE_ _FLAGSCMAKE_ _FLAGS_DEBUGCMAKE_ _FLAGS_MINSIZERELCMAKE_ _FLAGS_RELEASECMAKE_ _FLAGS_RELWITHDEBINFOCMAKE_ _IGNORE_EXTENSIONSCMAKE_ _IMPLICIT_INCLUDE_DIRECTORIESCMAKE_ _IMPLICIT_LINK_DIRECTORIESCMAKE_ _IMPLICIT_LINK_FRAMEWORK_DIRECTORIESCMAKE_ _IMPLICIT_LINK_LIBRARIESCMAKE_ _LIBRARY_ARCHITECTURECMAKE_ _LINKER_PREFERENCECMAKE_ _LINKER_PREFERENCE_PROPAGATESCMAKE_ _LINK_EXECUTABLECMAKE_ _OUTPUT_EXTENSIONCMAKE_ _PLATFORM_IDCMAKE_ _SIMULATE_IDCMAKE_ _SIMULATE_VERSIONCMAKE_ _SIZEOF_DATA_PTRCMAKE_ _SOURCE_FILE_EXTENSIONSCMAKE_ _VISIBILITY_PRESETCMAKE_ABSOLUTE_DESTINATION_FILESCMAKE_ANDROID_APICMAKE_ANDROID_API_MINCMAKE_ANDROID_GUICMAKE_APPBUNDLE_PATHCMAKE_ARCMAKE_ARCHIVE_OUTPUT_DIRECTORYCMAKE_ARGCCMAKE_ARGV0CMAKE_AUTOMOCCMAKE_AUTOMOC_MOC_OPTIONSCMAKE_AUTOMOC_RELAXED_MODECMAKE_AUTORCCCMAKE_AUTORCC_OPTIONSCMAKE_AUTOUICCMAKE_AUTOUIC_OPTIONSCMAKE_BACKWARDS_COMPATIBILITYCMAKE_BINARY_DIRCMAKE_BUILD_TOOLCMAKE_BUILD_TYPECMAKE_BUILD_WITH_INSTALL_RPATHCMAKE_CACHEFILE_DIRCMAKE_CACHE_MAJOR_VERSIONCMAKE_CACHE_MINOR_VERSIONCMAKE_CACHE_PATCH_VERSIONCMAKE_CFG_INTDIRCMAKE_CL_64CMAKE_COLOR_MAKEFILECMAKE_COMMANDCMAKE_COMPILER_2005CMAKE_COMPILER_IS_GNU CMAKE_COMPILE_PDB_OUTPUT_DIRECTORYCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY_ CMAKE_CONFIGURATION_TYPESCMAKE_CROSSCOMPILINGCMAKE_CTEST_COMMANDCMAKE_CURRENT_BINARY_DIRCMAKE_CURRENT_LIST_DIRCMAKE_CURRENT_LIST_FILECMAKE_CURRENT_LIST_LINECMAKE_CURRENT_SOURCE_DIRCMAKE_CXX_COMPILE_FEATURESCMAKE_CXX_EXTENSIONSCMAKE_CXX_STANDARDCMAKE_CXX_STANDARD_REQUIREDCMAKE_C_COMPILE_FEATURESCMAKE_C_EXTENSIONSCMAKE_C_STANDARDCMAKE_C_STANDARD_REQUIREDCMAKE_DEBUG_POSTFIXCMAKE_DEBUG_TARGET_PROPERTIESCMAKE_DISABLE_FIND_PACKAGE_ CMAKE_DL_LIBSCMAKE_EDIT_COMMANDCMAKE_ERROR_DEPRECATEDCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATIONCMAKE_EXECUTABLE_SUFFIXCMAKE_EXE_LINKER_FLAGSCMAKE_EXE_LINKER_FLAGS_ CMAKE_EXPORT_NO_PACKAGE_REGISTRYCMAKE_EXTRA_GENERATORCMAKE_EXTRA_SHARED_LIBRARY_SUFFIXESCMAKE_FIND_LIBRARY_PREFIXESCMAKE_FIND_LIBRARY_SUFFIXESCMAKE_FIND_NO_INSTALL_PREFIXCMAKE_FIND_PACKAGE_NAMECMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRYCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRYCMAKE_FIND_PACKAGE_WARN_NO_MODULECMAKE_FIND_ROOT_PATHCMAKE_FIND_ROOT_PATH_MODE_INCLUDECMAKE_FIND_ROOT_PATH_MODE_LIBRARYCMAKE_FIND_ROOT_PATH_MODE_PACKAGECMAKE_FIND_ROOT_PATH_MODE_PROGRAMCMAKE_FRAMEWORK_PATHCMAKE_Fortran_FORMATCMAKE_Fortran_MODDIR_DEFAULTCMAKE_Fortran_MODDIR_FLAGCMAKE_Fortran_MODOUT_FLAGCMAKE_Fortran_MODULE_DIRECTORYCMAKE_GENERATORCMAKE_GENERATOR_PLATFORMCMAKE_GENERATOR_TOOLSETCMAKE_GNUtoMSCMAKE_HOME_DIRECTORYCMAKE_HOST_APPLECMAKE_HOST_SYSTEMCMAKE_HOST_SYSTEM_NAMECMAKE_HOST_SYSTEM_PROCESSORCMAKE_HOST_SYSTEM_VERSIONCMAKE_HOST_UNIXCMAKE_HOST_WIN32CMAKE_IGNORE_PATHCMAKE_IMPORT_LIBRARY_PREFIXCMAKE_IMPORT_LIBRARY_SUFFIXCMAKE_INCLUDE_CURRENT_DIRCMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACECMAKE_INCLUDE_DIRECTORIES_BEFORECMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORECMAKE_INCLUDE_PATHCMAKE_INSTALL_DEFAULT_COMPONENT_NAMECMAKE_INSTALL_MESSAGECMAKE_INSTALL_NAME_DIRCMAKE_INSTALL_PREFIXCMAKE_INSTALL_RPATHCMAKE_INSTALL_RPATH_USE_LINK_PATHCMAKE_INTERNAL_PLATFORM_ABICMAKE_JOB_POOL_COMPILECMAKE_JOB_POOL_LINKCMAKE_LIBRARY_ARCHITECTURECMAKE_LIBRARY_ARCHITECTURE_REGEXCMAKE_LIBRARY_OUTPUT_DIRECTORYCMAKE_LIBRARY_PATHCMAKE_LIBRARY_PATH_FLAGCMAKE_LINK_DEF_FILE_FLAGCMAKE_LINK_DEPENDS_NO_SHAREDCMAKE_LINK_INTERFACE_LIBRARIESCMAKE_LINK_LIBRARY_FILE_FLAGCMAKE_LINK_LIBRARY_FLAGCMAKE_LINK_LIBRARY_SUFFIXCMAKE_MACOSX_BUNDLECMAKE_MACOSX_RPATHCMAKE_MAJOR_VERSIONCMAKE_MAKE_PROGRAMCMAKE_MAP_IMPORTED_CONFIG_ CMAKE_MATCH_COUNTCMAKE_MFC_FLAGCMAKE_MINIMUM_REQUIRED_VERSIONCMAKE_MINOR_VERSIONCMAKE_MODULE_LINKER_FLAGSCMAKE_MODULE_LINKER_FLAGS_ CMAKE_MODULE_PATHCMAKE_NOT_USING_CONFIG_FLAGSCMAKE_NO_BUILTIN_CHRPATHCMAKE_NO_SYSTEM_FROM_IMPORTEDCMAKE_OBJECT_PATH_MAXCMAKE_OSX_ARCHITECTURESCMAKE_OSX_DEPLOYMENT_TARGETCMAKE_OSX_SYSROOTCMAKE_PARENT_LIST_FILECMAKE_PATCH_VERSIONCMAKE_PDB_OUTPUT_DIRECTORYCMAKE_PDB_OUTPUT_DIRECTORY_ CMAKE_POLICY_DEFAULT_CMP CMAKE_POLICY_WARNING_CMP CMAKE_POSITION_INDEPENDENT_CODECMAKE_PREFIX_PATHCMAKE_PROGRAM_PATHCMAKE_PROJECT_ _INCLUDECMAKE_PROJECT_NAMECMAKE_RANLIBCMAKE_ROOTCMAKE_RUNTIME_OUTPUT_DIRECTORYCMAKE_SCRIPT_MODE_FILECMAKE_SHARED_LIBRARY_PREFIXCMAKE_SHARED_LIBRARY_SUFFIXCMAKE_SHARED_LINKER_FLAGSCMAKE_SHARED_LINKER_FLAGS_ CMAKE_SHARED_MODULE_PREFIXCMAKE_SHARED_MODULE_SUFFIXCMAKE_SIZEOF_VOID_PCMAKE_SKIP_BUILD_RPATHCMAKE_SKIP_INSTALL_ALL_DEPENDENCYCMAKE_SKIP_INSTALL_RPATHCMAKE_SKIP_INSTALL_RULESCMAKE_SKIP_RPATHCMAKE_SOURCE_DIRCMAKE_STAGING_PREFIXCMAKE_STANDARD_LIBRARIESCMAKE_STATIC_LIBRARY_PREFIXCMAKE_STATIC_LIBRARY_SUFFIXCMAKE_STATIC_LINKER_FLAGSCMAKE_STATIC_LINKER_FLAGS_ CMAKE_SYSROOTCMAKE_SYSTEMCMAKE_SYSTEM_IGNORE_PATHCMAKE_SYSTEM_INCLUDE_PATHCMAKE_SYSTEM_LIBRARY_PATHCMAKE_SYSTEM_NAMECMAKE_SYSTEM_PREFIX_PATHCMAKE_SYSTEM_PROCESSORCMAKE_SYSTEM_PROGRAM_PATHCMAKE_SYSTEM_VERSIONCMAKE_TOOLCHAIN_FILECMAKE_TRY_COMPILE_CONFIGURATIONCMAKE_TWEAK_VERSIONCMAKE_USER_MAKE_RULES_OVERRIDECMAKE_USER_MAKE_RULES_OVERRIDE_ CMAKE_USE_RELATIVE_PATHSCMAKE_VERBOSE_MAKEFILECMAKE_VERSIONCMAKE_VISIBILITY_INLINES_HIDDENCMAKE_VS_DEVENV_COMMANDCMAKE_VS_INTEL_Fortran_PROJECT_VERSIONCMAKE_VS_MSBUILD_COMMANDCMAKE_VS_MSDEV_COMMANDCMAKE_VS_NsightTegra_VERSIONCMAKE_VS_PLATFORM_NAMECMAKE_VS_PLATFORM_TOOLSETCMAKE_WARN_DEPRECATEDCMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATIONCMAKE_WIN32_EXECUTABLECMAKE_XCODE_ATTRIBUTE_ CMAKE_XCODE_PLATFORM_TOOLSETCPACK_ABSOLUTE_DESTINATION_FILESCPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORYCPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATIONCPACK_INCLUDE_TOPLEVEL_DIRECTORYCPACK_INSTALL_SCRIPTCPACK_PACKAGING_INSTALL_PREFIXCPACK_SET_DESTDIRCPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATIONCTEST_BINARY_DIRECTORYCTEST_BUILD_COMMANDCTEST_BUILD_NAMECTEST_BZR_COMMANDCTEST_BZR_UPDATE_OPTIONSCTEST_CHECKOUT_COMMANDCTEST_CONFIGURATION_TYPECTEST_CONFIGURE_COMMANDCTEST_COVERAGE_COMMANDCTEST_COVERAGE_EXTRA_FLAGSCTEST_CURL_OPTIONSCTEST_CVS_CHECKOUTCTEST_CVS_COMMANDCTEST_CVS_UPDATE_OPTIONSCTEST_DROP_LOCATIONCTEST_DROP_METHODCTEST_DROP_SITECTEST_DROP_SITE_CDASHCTEST_DROP_SITE_PASSWORDCTEST_DROP_SITE_USERCTEST_GIT_COMMANDCTEST_GIT_UPDATE_CUSTOMCTEST_GIT_UPDATE_OPTIONSCTEST_HG_COMMANDCTEST_HG_UPDATE_OPTIONSCTEST_MEMORYCHECK_COMMANDCTEST_MEMORYCHECK_COMMAND_OPTIONSCTEST_MEMORYCHECK_SANITIZER_OPTIONSCTEST_MEMORYCHECK_SUPPRESSIONS_FILECTEST_MEMORYCHECK_TYPECTEST_NIGHTLY_START_TIMECTEST_P4_CLIENTCTEST_P4_COMMANDCTEST_P4_OPTIONSCTEST_P4_UPDATE_OPTIONSCTEST_SCP_COMMANDCTEST_SITECTEST_SOURCE_DIRECTORYCTEST_SVN_COMMANDCTEST_SVN_OPTIONSCTEST_SVN_UPDATE_OPTIONSCTEST_TEST_TIMEOUTCTEST_TRIGGER_SITECTEST_UPDATE_COMMANDCTEST_UPDATE_OPTIONSCTEST_UPDATE_VERSION_ONLYCTEST_USE_LAUNCHERSCYGWINENVEXECUTABLE_OUTPUT_PATHLIBRARY_OUTPUT_PATHMINGWMSVCMSVC10MSVC11MSVC12MSVC14MSVC60MSVC70MSVC71MSVC80MSVC90MSVC_IDEMSVC_VERSIONPROJECT_BINARY_DIRPROJECT_NAMEPROJECT_SOURCE_DIRPROJECT_VERSIONPROJECT_VERSION_MAJORPROJECT_VERSION_MINORPROJECT_VERSION_PATCHPROJECT_VERSION_TWEAKUNIXWIN32WINCEWINDOWS_PHONEWINDOWS_STOREXCODE_VERSION
七 深入学习cmake
cmake实践
mastering cmake
cmake的帮助文档
转载地址:http://wobab.baihongyu.com/