怎样编写Cmake的配置文件cmakelist.txt教程

&re: Cmake的介绍和使用 Cmake实践&&&&
阅读排行榜
评论排行榜CMAKE的使用 - DoubleLi - 博客园
一、&&&&&&基本使用
安装:下载二进制包后可直接解压使用
从源码安装则执行命令:./ make install&&尝试执行bootstrap失败
使用:cmake dir_path,生成工程文件或makefile文件
二、&&&&&&概念
out-of-source&build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;
三、&&&&&&基本结构
1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;
2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录
3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验)
四、&&&&&&语法
1.&&&&&&&#注释
2.&&&&&&&变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值;
3.&&&&&&&command (args ...)&&#命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格
4.&&&&&&&set(b;c) &=& set(var a b c)&&#定义变量var并赋值为a;b;c这样一个string list
5.&&&&&&&Add_executable(${var}) &=& Add_executable(a b c)&&&#变量使用${xxx}引用
6.&&&&&&&条件语句:
if(var) #var&非empty 0 N No OFF FALSE... #非运算使用NOT
else()/elseif() & endif(var)
7.&&&&&&&循环语句
Set(VAR a b c)
Foreach(f ${VAR})&&&&&&&&Endforeach(f)
8.&&&&&&&循环语句
WHILE() & ENDWHILE()
五、&&&&&&内部变量
CMAKE_C_COMPILER:指定C编译器
CMAKE_CXX_COMPILER:
CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项
EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径
LIBRARY_OUTPUT_PATH:库文件路径
CMAKE_BUILD_TYPE::build&类型(Debug, Release, ...),CMAKE_BUILD_TYPE=Debug
BUILD_SHARED_LIBS:Switch between shared and static libraries
内置变量的使用:
&&&在CMakeLists.txt中指定,使用set
&& cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF
六、&&&&&&命令
project&(HELLO)&&&#指定项目名称,生成的VC项目的名称;
&&使用${HELLO_SOURCE_DIR}表示项目根目录
include_directories:指定头文件的搜索路径,相当于指定gcc的-I参数
&& include_directories (${HELLO_SOURCE_DIR}/Hello)&&#增加Hello为include目录
link_directories:动态链接库或静态链接库的搜索路径,相当于gcc的-L参数
&&&&&&&&& link_directories (${HELLO_BINARY_DIR}/Hello)&&&&&#增加Hello为link目录
add_subdirectory:包含子目录
&&&&&&&&& add_subdirectory (Hello)
add_executable:编译可执行程序,指定编译,好像也可以添加.o文件
&&&&&&&&& add_executable (helloDemo demo.cxx demo_b.cxx)&&&#将cxx编译成可执行文件&&
add_definitions:添加编译参数
&& add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义;
&& add_definitions( &-Wall -ansi &pedantic &g&)
target_link_libraries:添加链接库,相同于指定-l参数
&& target_link_libraries(demo Hello) #将可执行文件与Hello连接成最终文件demo
add_library:
&& add_library(Hello hello.cxx)&&#将hello.cxx编译成静态库如libHello.a
add_custom_target:
message( status|fatal_error, &message&):
set_target_properties( ... ): lots of properties... OUTPUT_NAME, VERSION, ....
link_libraries( lib1 lib2 ...): All targets link with the same set of libs
七、&&&&&&说明
1,CMAKE生成的makefile能够处理好.h文件更改时只编译需要的cpp文件;
八、&&&&&&FAQ
1)&&怎样获得一个目录下的所有源文件
&& aux_source_directory(&dir& &variable&)
&&&将dir中所有源文件(不包括头文件)保存到变量variable中,然后可以add_executable (ss7gw ${variable})这样使用。
2)&&怎样指定项目编译目标
&&&&project命令指定
3)&&怎样添加动态库和静态库
&& target_link_libraries命令添加即可
4)&&怎样在执行CMAKE时打印消息
&& message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)
&&&注意大小写
5)&&怎样指定头文件与库文件路径
&& include_directories与link_directories
&&可以多次调用以设置多个路径
&& link_directories仅对其后面的targets起作用
6)&&怎样区分debug、release版本
&&建立debug/release两目录,分别在其中执行cmake -DCMAKE_BUILD_TYPE=Debug(或Release),需要编译不同版本时进入不同目录执行make即可;
Debug版会使用参数-g;Release版使用-O3 &DNDEBUG
&&&另一种设置方法&&例如DEBUG版设置编译参数DDEBUG
IF(DEBUG_mode)
&&&&add_definitions(-DDEBUG)
在执行cmake时增加参数即可,例如cmake -D DEBUG_mode=ON
7)&&怎样设置条件编译
例如debug版设置编译选项DEBUG,并且更改不应改变CMakelist.txt
&&&使用option command,eg:
option(DEBUG_mode "ON for debug or OFF for release" ON)
IF(DEBUG_mode)
&&&&add_definitions(-DDEBUG)
&&&使其生效的方法:首先cmake生成makefile,然后make edit_cache编辑编译选项;Linux下会打开一个文本框,可以更改,该完后再make生成目标文件&&emacs不支持make edit_cache;
&&&局限:这种方法不能直接设置生成的makefile,而是必须使用命令在make前设置参数;对于debug、release版本,相当于需要两个目录,分别先cmake一次,然后分别make edit_cache一次;
&&&期望的效果:在执行cmake时直接通过参数指定一个开关项,生成相应的makefile&&可以这样做,例如cmake &DDEBUGVERSION=ON
8)&&怎样添加编译宏定义
&&&使用add_definitions命令,见命令部分说明
9)&&怎样添加编译依赖项
用于确保编译目标项目前依赖项必须先构建好
&&add_dependencies
10)&&&&&&&&怎样指定目标文件目录
&&&建立一个新的目录,在该目录中执行cmake生成Makefile文件,这样编译结果会保存在该目录&&类似
&& SET_TARGET_PROPERTIES(ss7gw PROPERTIES
&&&&&&&&&&&&&&&&&&&&&&RUNTIME_OUTPUT_DIRECTORY "${BIN_DIR}")
11)&&&&&&&&很多文件夹,难道需要把每个文件夹编译成一个库文件?
&&&可以不在子目录中使用CMakeList.txt,直接在上层目录中指定子目录
12)&&&&&&&&怎样设定依赖的cmake版本
&&cmake_minimum_required(VERSION 2.6)
13)&&&&&&&&相对路径怎么指定
&& ${projectname_SOURCE_DIR}表示根源文件目录,${ projectname _BINARY_DIR}表示根二进制文件目录?
14)&&&&&&&&怎样设置编译中间文件的目录
15)&&&&&&&&怎样在IF语句中使用字串或数字比较
&&数字比较LESS、GREATER、EQUAL,字串比STRLESS、STRGREATER、STREQUAL,
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
set(AAA abc)
IF(AAA STREQUAL abc)
&&&&message(STATUS "true")&&&#应该打印true
16)&&&&&&&&更改h文件时是否只编译必须的cpp文件
17)&&&&&&&&机器上安装了VC7和VC8,CMAKE会自动搜索编译器,但是怎样指定某个版本?
18)&&&&&&&&怎样根据OS指定编译选项
&& IF( APPLE ); IF( UNIX ); IF( WIN32 )
19)&&&&&&&&能否自动执行某些编译前、后命令?
&& 可以,TBD
20)&&&&&&&&怎样打印make的输出
make VERBOSE=1
参考文献:
[1]&CMake_Tutorial.pdf
[2]&CMake使用总结,http://blog.csdn.net/keensword007/archive//2663235.aspx
[4]&安装包中文档
[5]&Andrej Cedilnik,: Cross-Platform Software Development Using CMake,October, 2003
[6] Cjacker,CMake实践.PDFCMakeLists.txt文件写法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
CMakeLists.txt文件写法
上传于||文档简介
&&可​用​于​V​T​K​、​I​T​K​等​方​面
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Qt Creator 根据已有的CMakeList.txt创建CMake工程
Qt Creator 根据已有的CMakeList.txt创建CMake工程
本文根据已有的CMakeList.txt工程利用Qt Creator创建CMake工程。
参考文献:http://www.ogre3d.org/tikiwiki/tiki-index.php?page=Setting+Up+An+Application+-+QtCreator+-+Linux
参考文献:http://blog.csdn.net/frestone2010/article/details/6690854& &(用cmake构建Qt工程(对比qmake进行学习))
其中CMakeLists.txt范例:/s/1i3qz9cT& &&http://download.csdn.net/detail/deng_sai/8786231
简单版:http://download.csdn.net/detail/deng_sai/9041861&&&&
如果需要设置cmakelists所写工程能调试,则需设置:
在工程目录下的CMakeLists.txt中加入如下两行代码:&&
SET(CMAKE_CXX_FLAGS_DEBUG&"$ENV{CXXFLAGS}&-O0&-Wall&-g&-ggdb")&&&
SET(CMAKE_CXX_FLAGS_RELEASE&"$ENV{CXXFLAGS}&-O3&-Wall")&&&
如例子:&&
CMAKE_MINIMUM_REQUIRED(VERSION&2.6)&&
SET(CMAKE_CXX_FLAGS_DEBUG&"$ENV{CXXFLAGS}&-O0&-Wall&-g&-ggdb")#就是这两行东东&&
SET(CMAKE_CXX_FLAGS_RELEASE&"$ENV{CXXFLAGS}&-O3&-Wall")#&&
cmake或者cmake-gui 时将变量CMAKE_BUILD_TYPE设置为Debug。
Introduction
This set of instructions will walk you through setting up a QtCreator C++ project from scratch.
When you have finished this tutorial you will be able to compile a working Ogre Application and you will be ready to start the&.
Table of contents
Prerequisites
Follow the instruction at&&to setup a CMake project.&
Do not generate the project using the CMake GUI - you don't need to as QtCreator will handle the rest.
Setting up an Ogre project in QtCreator
Open project
QtCreator - File - Open File or Project:&
Choose build location
此处可能点击Run CMake后Qt Creator 没反应。可能是Qt Creator的CMake的执行命令的路径没指定。
Projects-&Manage Kits...-&Build & Run -& CMake(可以指定为cmake,也可直接指定cmake-gui。不过假如首先指定的是cmake-gui,run cmake后可能无法显示导入的工程文件,需要再次指定为cmake后再一次run cmake)
click Finish
Make in console
You need to find the qtcreator-build(/home/deng_sai/myQtCreator/fast_qt/openPOWERLINK-V1.08.4/Build) directory and run this in a console:
make && make install
The reason is that it's a bit involved to set up an INSTALL build configuration in QtCreator, and it only needs to be done once.
Setup executable for project run
Now, click the green arrow in the sidebar to build and run the project.&
Since we haven't set up any run configuration, we are prompted to do that in the following dialogue:&
Choose&build_directory/dist/bin/OgreApp&as executable and&build_directory/dist/bin&as working directory.
Conclusion
As you can see, it's rather easy to setup a project in QtCreator if you use a CMake script.&
QtCreator doesn't touch your source directory, except one file:&CMakeLists.txt.user.
发表评论:
TA的最新馆藏怎样编写Cmake的配置文件Cmakelist.txt_百度知道
怎样编写Cmake的配置文件Cmakelist.txt
对与每一个项目的目录。也就是说,如果你的目标是用CMake来管理你的生成过程,请阅读这一章。 CMake的输入 COMMAND(args) 这里的 COMMAND 是命令行的名称。典型的,args是用空格分割的参数列表..这一章将从软件开发者的角度来描述如何实用CMake
知道智能回答机器人
我是知道站内的人工智能,可高效智能地为您解答问题。很高兴为您服务。
其他类似问题
为您推荐:
其他4条回答
优先级比cmake命令参数设置高,如图是windows下版本程序更具一个简单多目录c项目,windows 多个平台版本:6查看编译后结果:7安装后目录结构,学下cmakelist.txt编写规范根目录下cmakelist文件内容:set(CMAKE_INSTALL_PREFIX):libhello 目录下的cmakelist文件内容:设置程序的安装目录。add_subdirectory(编译文件子目录)libhello 目录下的cmakelist文件内容CmakeCmake 有linux
CMake是一个编译配置工具, 它是一个跨平台c/c++ 编译配置工具。可以通过编写CMakeLists.txt配置文件,可以控制生成的Makefile或者windows下工程文件。还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。所以写好CMakeLists.txt 是使用好Cmake的关键工具/原料
这个可以在你的百度注册一个小助手就可以认证的对待教会你的制作
根据你的需求,可以上网搜搜,如果实在没有的话,可以查看一下专业的书籍。
cmake的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 cmake 编写 的文章

 

随机推荐