CMake实践(1)
简介:
目录结构t1/main.cpp; t1/CMakeLists.txt
说明:
main.cpp:
#include <stdio.h>
int main()
{
printf("Hello World from t1 Main!\n");
return 0;
}
CMakeLists.txt
#测试方法
#构建工程 :在t1目录下执行:cmake .
# 系统会自动生成:CMakeFiles, CMakeCache.txt, cmake_install.cmake等文件,并且生成了Makefile,
# 你可以不去理会这些文件,最关键的是它自动生成了Makefile
#实际构建: 在t1目录下执行:make
#
#COMMAND:PROJECT(projectname [CXX] [C] [Java])
#定义:定义工程名称,并可指定工程支持的语言(可忽略,默认情况支持所有语言)
#备注:这个指令隐式定义了2个cmake变量:<projectname>_BINARY_DIR, <projectname>_SOURCE_DIR
# 所以MESSAGE指令里可以直接用这2个变量,在内部编译下两者目录相同,均指向当前CMakelists.txt所在目录。
# 还帮我们预定义了另2个变量:PROJECT_BINARY_DIR(=<projectname>_BINARY_DIR),
# PROJECT_SOURCE_DIR(-<projectname>_SOURCE_DIR)
# 推荐使用后2个变量,即使修改了工程名称,也不会修改影响到这两个变量了。
PROJECT(HELLO)
#COMMAND:SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
#定义:用来显式的定义变量
SET(SRC_LIST main.cpp)
#COMMAND:MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"...)
#定义:向终端输出用户自定义的信息
# SEND_ERRO: 产生错误,生成过程被跳过
# STATUS: 输出前缀为-的信息
# FATAL_ERROR:立即终止所有cmake过程
MESSAGE(STATUS "This is BINARY dir" ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})
#COMMAND:ADD_EXECUTABLE
#定义:定义工程生成的可执行文件,以及它所依赖的相关的源文件列表
ADD_EXECUTABLE(hello ${SRC_LIST})
#附:
#1)cmake基本语法规则
#1.1)变量使用${}方式取值,但是在IF控制语句中要直接使用变量名
#1.2)指令(参数1 参数2...)
# 参数用()括起来,参数之间用空格或分号分开
#1.3)指令是大小写无关,参数和变量是大小写相关的。推荐全部使用大写指令。
#2)语法相关
#SET(SRC_LIST main.c) == SET(SRC_LIST "main.c")
#SET(SRC_LIST fun nc.c) != SET(SRC_LIST "fun nc.c") :后者的""内的字符会被当成1个文件,
#3)内部编译vs外部编译
# 在CMakeLists.txt当前目录下执行"cmake .",属于内部编译
# 它生成的临时文件和工程文件在同一目录下,删除起来非常不方便
# 不在CMakeLists.txt当前目录下执行“cmake ../<path_to_CMakeLists_Dir> 属于外部编译
# 也就是out-of-source外部编译,所有动作全部发生在编译目录,对原有工程没有任何影响,推荐!!!
# 比如在t1目录下创建build目录,进到build目录下执行:"cmake ../", 此次编译过程便为外部编译
# 注:此时HELLO_SOURCE_DIR仍指工程路径:../cmake/t1(与CMakeLists.txt同级)
# HELLO_BINARY_DIR则指编译路径:../cmake/t1/build(与当前cmake执行命令所在的目录同级)
附:
外部编译结果:
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /opt/gcc/bin/gcc
-- Check for working C compiler: /opt/gcc/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /opt/gcc/bin/c++
-- Check for working CXX compiler: /opt/gcc/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- This is BINARY dir/home/sunjj/program/cmake_practice/t1/build
-- This is SOURCE dir/home/sunjj/program/cmake_practice/t1
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sunjj/program/cmake_practice/t1/build
CMake实践(1)的更多相关文章
- 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...
- 《CMake实践》第三部分的示例代码的错误
<CMake实践>的第三章,初试cmake - cmake的helloworld 中的 PROJECT (HELLO) SET(SRC_LIST main.c) MESSAGE(statu ...
- CMake实践--操作
---<Cmake 实践>--- ---Ubuntu 14.04 1.创建一个cmake文件目录 mkdir -p ~/cmake 2.在cmake文件下创建t1子目录 cd ~/cmak ...
- 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】
本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用 ...
- 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE【转】
本文转载自:http://www.cnblogs.com/52php/p/5681745.html 前言: 开发了5,6年的时间,如果没有KDE4,也许不会有人或者Linux发行版本重视cmake,因 ...
- Cmake的介绍和使用 Cmake实践【转】
本文转载自:http://www.cppblog.com/Roger/archive/2011/11/17/160368.html Cmake的介绍和使用 Cmake实践 Cmake优点: 1. ...
- Cmake的介绍和使用 Cmake实践
Cmake的介绍和使用 Cmake实践http://www.cppblog.com/Roger/archive/2011/11/17/160368.html
- CMake实践(4)
一,本期目标: [sun@localhost t4]$ cat README 任务:如何使用外部共享库和文件 二,目录结构 [sun@localhost t4]$ tree ../t4../t4├── ...
随机推荐
- netbeans 7安装xdebug调试php程序
1.下载安装xdebug 先从xdebug官网下载对应php版本的xdebug组件,下载地址是:http://www.xdebug.org/download.php 如果不确定下载哪个版本的xdebu ...
- SPOJ 3643 /BNUOJ 21860 Traffic Network
题意:现在已有m条单向路,问在给你的k条双向路中选择一条,使得s到t的距离最短 思路:设双向路两端点为a,b;长度为c. s到t的有三种情况: 1:原本s到t的路径 2:从s到a,a到b,b再到t的路 ...
- linux的strace命令用法
strace命令用法 调用:strace [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] …[ -ofile ] [ -ppid ] … [ -sstrsize ...
- 取消 EditText 自动聚焦弹出输入法界面
方法一(实测可行): 参考http://www.cnblogs.com/dream-cichan/p/aaaa.html 当我点击跳转至一个带有EditText的界面后,模拟器中的软键盘会自动弹出,严 ...
- SaaS系列介绍之十五: SaaS知识重用
1 建立并积累自己的开发体系 遵行业界的规定又有自己的特色是我们所追求的目标.成功的软件公司都有丰富而可复用的代码组件,几行代码在单个系统里可能无足轻重,但一旦可在大量的系统中可重复使用那就是价值不菲 ...
- Spring transaction事务之roll back回滚
转载自:http://blog.csdn.net/lovejavaydj/article/details/7635848 试验方法: 写一个单元测试,调用一个service层方法(发生对数据库进行写操 ...
- TCL语言笔记:TCL中的列表操作
一.介绍 列表则是具有特殊解释的字符串.Tcl 中的列表操作和其它 Tcl 命令一样具有相同的结构.列表可应用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命 ...
- 2.Sprng-IoC-Java反射例子
1.Car.java package com.jike.spring.chapter03.reflect; public class Car { private String brand; priva ...
- IntelliJ IDEA像Eclipse一样打开多个项目
原文:http://blog.csdn.net/zht666/article/details/47831893 我们做项目实际中经常会遇到这样的情况,创建一个common项目(Maven项目)作为公用 ...
- MyBatis开发Dao
MyBatis开发Dao有两种方法: 1.原始Dao开发方法,就是程序需要编写Dao的接口和Dao的实现类. 2.MyBatis的mapper接口(相当于Dao接口)代理开发方法.(更重要) ---- ...