• CMake实践(1)


    简介:

    目录结构t1/main.cpp; t1/CMakeLists.txt

    说明:

    main.cpp:

    #include <stdio.h>

    int main()
    {
        printf("Hello World from t1 Main! ");

        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

  • 相关阅读:
    【算法笔记】B1007 素数对猜想
    【算法笔记】B1006 换个格式输出整数
    【算法笔记】B1005 继续(3n+1)猜想+sort()用法
    【算法笔记】B1004 成绩排名
    【算法笔记】B1003 我要通过!
    【算法笔记】B1002 写出这个数
    【算法笔记】B1001 害死人不偿命的(3n+1)猜想
    JZOJ 3233. 照片
    JZOJ 1243. TreeCount
    JZOJ 1241. Number
  • 原文地址:https://www.cnblogs.com/jacklikedogs/p/3779867.html
Copyright © 2020-2023  润新知