简介:

目录结构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)的更多相关文章

  1. 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  2. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  3. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  4. 《CMake实践》第三部分的示例代码的错误

    <CMake实践>的第三章,初试cmake - cmake的helloworld 中的 PROJECT (HELLO) SET(SRC_LIST main.c) MESSAGE(statu ...

  5. CMake实践--操作

    ---<Cmake 实践>--- ---Ubuntu 14.04 1.创建一个cmake文件目录 mkdir -p ~/cmake 2.在cmake文件下创建t1子目录 cd ~/cmak ...

  6. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】

    本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用  ...

  7. 《CMake实践》笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE【转】

    本文转载自:http://www.cnblogs.com/52php/p/5681745.html 前言: 开发了5,6年的时间,如果没有KDE4,也许不会有人或者Linux发行版本重视cmake,因 ...

  8. Cmake的介绍和使用 Cmake实践【转】

    本文转载自:http://www.cppblog.com/Roger/archive/2011/11/17/160368.html Cmake的介绍和使用 Cmake实践 Cmake优点: 1.    ...

  9. Cmake的介绍和使用 Cmake实践

    Cmake的介绍和使用 Cmake实践http://www.cppblog.com/Roger/archive/2011/11/17/160368.html

  10. CMake实践(4)

    一,本期目标: [sun@localhost t4]$ cat README 任务:如何使用外部共享库和文件 二,目录结构 [sun@localhost t4]$ tree ../t4../t4├── ...

随机推荐

  1. POJ 2407 Relatives(欧拉函数)

    题目链接 题意 : 求小于等于n中与n互质的数的个数. 思路 : 看数学的时候有一部分是将欧拉函数的,虽然我没怎么看懂,但是模板我记得了,所以直接套了一下模板. 这里是欧拉函数的简介. #includ ...

  2. HDU 1882 Strange Billboard(位运算)

    题目链接 题意 : 给你一个矩阵,有黑有白,翻转一个块可以让上下左右都翻转过来,问最少翻转多少次能让矩阵变为全白. 思路 : 我们从第一行开始枚举要翻转的状态,最多可以枚举到2的16次方,因为你只要第 ...

  3. GDB笔记

    GDB是在Linux命令行下对C/C++的程序进行调试常用的一个命令,现将平时记录在本子上的笔记整理如下: 一.断点 断点类型有breakpoints, watchpoints, catchpoint ...

  4. 【memcache缓存专题(2)】memcache安装与命令行使用

    进新公司一个多月了,一直没有时间来更新,后续还是要保持着每日更新的频率 安装 在windows上安装 略(都玩到缓存的程度了,就没必要在windows上捣弄了) 给个参考: http://blog.c ...

  5. AE数据加载

    1. 数据加载问题: 任何系统都离不开数据的加载,下边就AE中几种常用的数据加载做一个列举.以便查阅: 1.加载个人数据库 个人数据库是保存在Access中的数据库.其加载方式有两种:通过名字和通过属 ...

  6. esriFeatureType与esriGeometryType的区别与联系

    esriFeatureType通常用来表示数据的存储结构,即物理层: esriGeometryType通常用来表示数据的几何形状,即表现层. esriGeometryType枚举类型详解 常量 值 对 ...

  7. ADO.NET基础02(语句参数化,配置文件,DataSet与DataTable)

    ADO.NET连接池 ado.net默认启用了连接池 *如何清空连接池?Connection的静态方法ClearAllPools(). ClearPool() Ado.net连接池使用总结: 1.第一 ...

  8. android4.4.2内核移植3.4.1

    01◑ 内核源码总目录下Makefile文件修改: 195行: ARCH ?= $(SUBARCH)替换成: ARCH ?= arm 02◑ arch/arm下makefile: ①差7行 # tes ...

  9. Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧

    目前开发的方式是采用远程load页面来实现多页面效果,类似于126邮箱多标签页效果.但是比126邮箱的方式更好,因为页面打开后是load到本地的,126似乎还会重新请求.在近期项目该开发方式已经基本成 ...

  10. css实现缩进无限嵌套

    使用css实现缩进带背景无限嵌套,支持Ie6,代码如下: <!DOCTYPE html> <html lang="en"> <head> < ...