简介:

目录结构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. Splay树再学习

    队友最近可能在学Splay,然后让我敲下HDU1754的题,其实是很裸的一个线段树,不过用下Splay也无妨,他说他双旋超时,单旋过了,所以我就敲来看下.但是之前写的那个Splay越发的觉得不能看,所 ...

  2. 关联式容器(associative containers)

    关联式容器(associative containers) 根据数据在容器中的排列特性,容器可分为序列式(sequence)和关联式(associative)两种. 标准的STL关联式容器分为set( ...

  3. java基础知识回顾之javaIO类--内存操作流ByteArrayInputStream和ByteArrayOutputSteam(操作字节数组)

    直接看代码: package cn.itcast.io.p6.bytestream; import java.io.ByteArrayInputStream; import java.io.ByteA ...

  4. ***CI分页:为CodeIgniter写的分页类

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  5. /bin/bash^M: bad interpreter: No such file or dire

    在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识.  查看脚本文件是dos格式还是unix格式的几种办 ...

  6. HDU 1164 Eddy's research I

    题目链接 题意 : 给你一个数,让你用它的素数质因子表示出来. 思路 : 先打一下表,因为会有重复的质因子,所以从大到小开始找,并且找到一个之后不能就接着往下找,要再找一遍这个数. #include ...

  7. poj 1026 Cipher

    置换群就可以搞定!!! 注意下格式就好了…… #include<iostream> #include<stdio.h> #include<algorithm> #i ...

  8. [转]Openstack Havana Dashboard测试和使用

    转贴一篇陈沙克老师的文章:http://www.chenshake.com/openstack-havana-dashboard-to-test-and-use/ Openstack Havana D ...

  9. java使用Apache POI操作excel文件

    官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...

  10. 为什么需要用到序列化?为什么HttpSession中对象要序列化

    简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的 ...