精华内容
下载资源
问答
  • cmake gui 使用教程

    2020-12-23 11:16:18
    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名...

    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。

    CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。

    “CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。

    下载:      在安装metis-5.0时,安装说明中要求必须安装CMake2.8版本,下面是CMake的安装和使用方法,记录下来以便以后学习。在网址 http://www.cmake.org/ 下载你所需要的CMake源码包cmake-2.8.8.tar..gz(版本不同,压缩包后缀不同),分为Unix/linux版本 和 windows版本 。1、安装有好几种安装CMake 的方法,因你所用的平台而异。(1)从源码安装

    Windows在CMake 下载页面 上有已编译好的二进制包。它提供的是一个可执行的安装程序。你还可以下载源码包并从源码包编译CMake。CMake下载页面还提供了已释出的源码和访问CVS的指令。

    为了从源码树编译CMake,你必须先要安装最新的CMake二进制版本,因为要用它来编译源码树。一旦装好了二进制版本的CMake,你就可以像编译其他项目一样使用CMake编译CMake了。一般来说,这意思是你要选择CMake源码目录作为源目录,然后再指定编译出来的可执行程序结果的位置。

    Linux, Mac OSX, UNIX & Cygwin在CMake 下载页面 上有许多UNIX平台上已经编译好的二进制包。

    下面有几种从源码树编译CMake的方法:

    解压:tar xvf cmake-2.8.8.tar.gz

    进入解压目录:cd cmake-2.8.8

    进行如下操作:(选择适合自己的操作步骤)

    如果还没有安装CMake,源码树中提供了一个 bootstrap 脚本:./bootstrapmakemake install(注:make install 一步是可选的,CMake 可以在编译目录下运行。)

    一个已经安装了的CMake也可以用于编译新版本的CMake:cmake .makemake install(注:make install 一步是可选的,CMake 可以在编译目录下运行。)

    在UNIX上,如果你不是使用的GNU C++编译器,你要告诉bootstrap 脚本你想用哪个编译器。这可以在运行configure命令前通过设置CC和CXX环境变量完成。例如,在一个带有7.3X编译器的SGI平台上,你可以像下面这样编译CMake:(setenv CXX CC; setenv CC cc; ./bootstrap)makemake install要查看bootstrap脚本的详细参数,请执行 ./bootstrap –help

    (2)从二进制安装

    sudo apt-get install cmake

    2、cmake 运行

    (1)运行cmake with GUI

    如果系统中有curses库的话,cmake将生成一个可执行文件ccmake,它是一个基于文本程序的终端,有点类似windows GUI。

    在源码目录中运行ccmake .,生成的二进制文件存放在源码目录下

    当然也可以在其他目录下运行ccmake,只是要指定你想编译的源码的路径

    ccmake的使用

    当我们在源码目录下运行ccmake . 时,终端将显示如下:

    当我们键入c时,ccmake将编译

    当我们键入方向键时,可以选择cache entry

    当我们键入enter时,可以编辑cache entry

    当我们键入g时,将生成Makefile,然后退出

    当我们键入h时,将弹出帮助文档

    当我们键入q时,将退出ccmake

    当我们键入t时,可以打开或关闭advanced cache entry

    (2)运行cmake from the command line

    如果源码没有太多的选项(在CMakeCache.txt文件中),可以只用cmake .来产生Makefile。

    如果源码选项太多,比如VTK,可以把参数-i传递给cmake,如:cmake -i .,

    cmake将让你为每一个cache file文件中的选项指定一个值,也能让你增加新的选项到文件CMakeCache.txt中,或者使用ccmake,或者使用CMakeSetup。

    当然,也可以传递设置选项的参数给cmake,如:

    cmake -DVARIABLE:TYPE=VALUE .

    3、  CMake cache

    cmake第一次运行的时候,它将产生一个文件叫CMakeCache.txt,该文件可以被看作一个配置文件,它里面的内容就像传递给configure命令的参数集,CMake GUI可以帮你很容易修改它,当然也可以直接对该文件做修改;如果你的CMakeLists.txt文件做过较大幅度的修改,你需要从cache中删除相关的选项,如果你还没有手动编辑过cache文件,在你重新运行cmake之前需删除它。

    4、    Cmake语法

    (1)基本概念

    cmake使用Cmake  dfjs;dfasfLists.txt文件,该文件用include或者add_subdirectory命令来增加额外的输入文件。

    注释行以#开头到该行结尾

    命令是由命令名,加括号,括号中的参数用空白隔开,它可以是内建的命令如add_library,或者用户定义的宏或函数

    所有的空格,包含空白符,空行,tabs,当然除了用来隔开参数的空白,都被忽略

    (2)变量

    。字符串

    一个字符串是用双引号括起来的,也可以被分隔在多行,如:

    set(MY_STRING “this is a string with a

    newline in

    it”)

    在一个字符串中也可以用变量,如:

    set(VAR “

    hello

    world

    ”)

    当执行message(“/${VAR}=${VAR}”)后,将打印:

    ${VAR}=

    hello

    world

    也可以message(“/n/thello world”)后,将打印:

    hello world

    。字符串列表

    cmake基本的数据类型为字符串,也可以支持字符串列表,如:

    set(VAR a;b;c)或set(VAR a b c)将把VAR设置为字符串列表

    要使用VAR,可以用${VAR},如:

    command(${VAR}),它相当于command(a b c)

    如果想把一个字符串列表作为单个参数传递给命令,可以用双引号,如:

    command(“${VAR}”),相当于command(“a b c”)

    (3)流程控制

    。判断

    if(var)

    some_command(...)

    endif(var)

    当var的值不为empty,0,N,NO,OFF,FALSE,NOTFOUND

    -NOTFOUND,some_command(...)将被执行

    。循环

    set(VAR a b c)

    foreach(f ${VAR})

    message(${f})

    endforeach(f)

    用变量f依次代替a,b,c执行message()

    。宏和函数定义

    定义一个宏hello

    macro(hello MESSAGE)

    message(${MESSAGE})

    endmacro(hello)

    调用宏hello

    hello(“hello world”)

    定义一个函数hello

    function(hello MESSAGE)

    message(${MESSAGE})

    endfunction(hello)

    (4)正则表达式

    很多CMake命令如if,会使用正则表达式作为参数,下面是正则表达式会用到的特殊字符:

    ^:匹配一行或一个字符串的开头

    $:匹配一行或一个字符串的结尾

    .:匹配单个字符

    []:匹配方括号中任意字符或字符串

    [^]:匹配不是方括号中的字符或字符串

    [-]:匹配在dash任意一边的字符

    *:匹配0或多个先前的字符序列

    +:匹配1或多个先前的字符序列

    ?:匹配0或1个先前的字符序列

    ():保存一个匹配的表达式,以便以后使用

    展开全文
  • cmake 教程

    2019-04-24 01:06:07
    NULL 博文链接:https://gangling.iteye.com/blog/2381913
  • cmake-gui使用教程

    万次阅读 多人点赞 2017-02-22 10:18:56
    参考了这篇博客:http://blog.csdn.net/fan_hai_ping/article/details/8208898CMake安装包下载:http://www.cmake.org/cmake/resources/software.html 简介:cmakes是生成跨平台工程的工具,比如可以为工程生成.sln...

    简述

    参考了这篇博客:http://blog.csdn.net/fan_hai_ping/article/details/8208898
    简介:cmakes是生成跨平台工程的工具,比如可以为工程生成.sln文件在Visual Studio上打开,也可以生成.pro文件在QtCreator上打开。

    CMake可以用命令行打开,这个比较麻烦。也可以用CMake的gui版本进行图形化操作,本博客就是介绍的camke-gui版的使用教程。

    软件安装

    1. CMake安装包下载:链接http://www.cmake.org/cmake/resources/software.html
    2. 双击下载好的安装包,按照提示就能一步步安装上。像其他软件一样。

    软件使用

    1. 本文以gitHub上的rabbitmq源码为例,如果你已经有下载好的源码,请直接看第2步。如果只是为了学习使用cmake-gui,接着往后看。在gitHub上下载所需要的源码(下载链接https://github.com/alanxz/rabbitmq-c),保存,本例中源码路径是D:\rabbitmq-c-master,其中rabbitmq-c-master是源码所在的文件夹。
    2. 打开cmake-gui,如图
      点击“Where is source code”行的Browser Source,加载源码所在目录。点击“Where to build the binarys行的Browser Source,加载源码所在目录下的build目录,生成了项目文件就在这里”,
    3. 点击“Where is source code”行的Browser Source,加载源码所在目录。
    4. 点击“Where to build the binarys行的Browser Source,加载源码所在目录下的build目录,生成了项目文件就在这里”
    5. configure
      vs2013 –32位 选这个
      这里写图片描述
      vs2013 –64位 选这个
      这里写图片描述
    6. 单击 Generate 生成解决方案
    7. 单击 Open Project 调用Vs2013打开工程。
    展开全文
  • CMake 使用教程

    2021-01-13 22:29:51
    虽然本文是官方的入门教程,但本教程并不是面向从未使用CMake 的用户。本文并不会对使用到的命令进行一一解释,所以在阅读本文之前用户应该对 CMake 有一些了解和接触。下面是一个一步步的教程包含了使用 CM...

    资源

    本文档翻译自官方 cmake turorial 。更新日期:2018年9月27日。译者这里以 windows 平台为例,介绍了在 Windows 平台下配合 VS2017 的使用方法。

    虽然本文是官方的入门教程,但本教程并不是面向从未使用过 CMake 的用户。本文并不会对使用到的命令进行一一解释,所以在阅读本文之前用户应该对 CMake 有一些了解和接触。

    下面是一个一步步的教程包含了使用 CMake 构建系统的常用情况。下面介绍的许多内容都在 Mastering CMake 一书中作为单独的议题介绍过了,但在一个样例项目中演示如何将它们结合在一起同样是是否有用的。本教程可以在 CMake 源文件中的 Tests/Tutorial 目录下找到。每一个步骤都有它们自己的子文件夹,包含了对应步骤完整的教程源码。

    通过查看 cmake-buildsystem 和 cmake-language 手册的介绍章节可以对 CMake 的设计理念和源码结构组织有一个整体的了解。

    基础的构建步骤(步骤1)

    一个最常用的基础项目是从源码中构建一个可执行文件。对于一个简单的项目两行 CMakeLists.txt 文件就能搞定:

    cmake_minimum_required (VERSION 2.6)

    project (Tutorial)

    add_executable(Tutorial tutorial.cxx)

    上面的例子中使用了小写的命令,事实上,CMakeLists.txt 文件并不区分命令的大小写。tutorial.cxx 源码是用来计算一个数的算数平方根,下面是其一个简单的版本:

    // A simple program that computes the square root of a number

    #include

    #include

    #include

    int main (int argc, char *argv[])

    {

    if (argc < 2)

    {

    fprintf(stdout,"Usage: %s number\n",argv[0]);

    return 1;

    }

    double inputValue = atof(argv[1]);

    double outputValue = sqrt(inputValue);

    fprintf(stdout,"The square root of %g is %g\n",

    inputValue, outputValue);

    system("pause");

    return 0;

    }

    译者这里在 16 行附加了一行 system("pause"); ,是为了程序执行完毕后不会立刻关闭窗口。后面的代码的示例中并不会再添加此行,如果用户需要暂停的话,可以在自己的代码中加入该行。

    添加版本号和配置头文件

    第一个要添加的特性就是给我们的可执行文件和项目提供一个版本号。你可以在你的源码之外做到这一点,在 CMakeLists.txt 文件中做这些会更加灵活。为了添加一个版本号我们修改我们的 CMakeList.txt 文件如下:

    cmake_minimum_required (VERSION 2.6)

    project (Tutorial)

    # The version number.

    set (Tutorial_VERSION_MAJOR 1)

    set (Tutorial_VERSION_MINOR 0)

    # configure a header file to pass some of the CMake settings

    # to the source code

    configure_file (

    "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"

    "${PROJECT_BINARY_DIR}/TutorialConfig.h"

    )

    # add the binary tree to the search path for include files

    # so that we will find TutorialConfig.h

    include_directories("${PROJECT_BINARY_DIR}")

    # add the executable

    add_executable(Tutorial tutorial.cxx)

    因为配置文件会被写入到生成路径(binary tree) 中,所以我们必须将该文件夹添加到头文件搜索路径中。接下来我们在源码中创建一个包含以下内容的 TutorialConfig.h.in 文件:

    // the configured options and settings for Tutorial

    #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@

    #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

    当 CMake 配置这个头文件的时候,@Tutorial_VERSION_MAJOR@ 和 @ Tutorial_VERSION_MINOR@ 就会用CMakeLists.txt 文件中对应的值替换。接下来我们修改 tutorial.cxx 源码包含配置头文件并使用版本号,修改后的源码如下:

    // A simple program that computes the square root of a number

    #include

    #include

    #include

    #include "TutorialConfig.h"

    int main (int argc, char *argv[])

    {

    if (argc < 2)

    {

    fprintf(stdout,"%s Version %d.%d\n",

    argv[0],

    Tutorial_VERSION_MAJOR,

    Tutorial_VERSION_MINOR);

    fprintf(stdout,"Usage: %s number\n",argv[0]);

    return 1;

    }

    double inputValue = atof(argv[1]);

    double outputValue = sqrt(inputValue);

    fprintf(stdout,"The square root of %g is %g\n",

    inputValue, outputValue);

    return 0;

    }

    构建项目并执行文件

    官方并没有给出如何构建项目,这里以 VS 为例介绍如何构建以上项目并编译执行。在该目录下面建立 build 文件夹,并新建 run.cmd 文件,编写内容如下:

    echo off

    echo build:

    cmake -G "Visual Studio 15 2017 Win64" ..

    echo compile:

    devenv Tutorial.sln /build "Debug|x64"

    echo run:

    start ./Debug/Tutorial.exe %1

    上面脚本中 echo命令主要是用来输出提示信息,可以忽略。剩下一共有三行代码。

    第3行代码为使用 CMake 构建工程文件.-G 参数用来指定编译器,如果不写这里会找到一个默认的编译器。我这里默认的编译器就是 VS2017,但是默认构建的程序为 32 位程序,我这里显示的指定使用 VS2017 构建 64 位程序。

    第5行代码是使用命令行的形式编译 VS 的 .sln 文件。关于命令行构建 VS 项目这里不做过多介绍,有兴趣可以参考微软官方给出的 Devenv command line switches。当然我们也可以使用 VS 打开 .sln 文件,然后手动点击 生成 。

    第7行代码为运行程序。

    添加一个库文件(步骤2)

    现在我们将会给我们的项目添加一个库文件。这个库文件包含了我们自己实现的开方运算。可执行文件使用这个库替代编译器提供的标准开方运算。本教程中我们将其放到 MathFunctions 文件夹下,该文件夹下还有一个包含下面一行代码的 CMakeLists.txt 文件。

    add_library(MathFunctions mysqrt.cxx)

    mysqrt.cxx 文件只有一个名为 mysqrt 的函数,其提供了和标准库 sqrt 相同的功能。内容如下(官网官方例程中可以找到):

    #include "MathFunctions.h"

    #include

    // a hack square root calculation using simple operations

    double mysqrt(double x)

    {

    if (x <= 0) {

    return 0;

    }

    double result;

    double delta;

    result = x;

    // do ten iterations

    int i;

    for (i = 0; i < 10; ++i) {

    if (result <= 0) {

    result = 0.1;

    }

    delta = x - (result * result);

    result = result + 0.5 * delta / result;

    fprintf(stdout, "Computing sqrt of %g to be %g\n", x, result);

    }

    return result;

    }

    对应的头文件为 MathFunction.h,其内容如下:

    double mysqrt(double x);

    为了构建并使用新的库文件,我们需要在顶层 CMakeList.txt 文件添加 add_subdirectory 语句。我们需要添加额外的头文件包含路径,以便将包含函数原型的 MathFunctions/MathFunctions.h 头文件包含进来。最后我们还需要给可执行文件添加库。最终顶层 CMakeList.txt 文件的最后几行如下所示:

    include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")

    add_subdirectory (MathFunctions)

    # add the executable

    add_executable (Tutorial tutorial.cxx)

    target_link_libraries (Tutorial MathFunctions)

    现在我们考虑将 MathFunctions 库作为一个可选项。虽然在这里并没有什么必要,但是如果库文件很大或者库文件依赖第三方库你可能就希望这么做了。首先先在顶层 CMakeLists.txt 文件添加一个选项:

    # should we use our own math functions?

    option (USE_MYMATH

    "Use tutorial provided math implementation" ON)

    这个选项会在 CMake GUI 中显示并会将默认值设置为 ON,用户可以根据需求修改该值。这个设置会本保存下来,所以用户无需在每次运行 CMake 时都去设置。接下来就是将构建和连接 MathFunctions 设置为可选项。修改顶层的 CMakeLists.txt 文件如下所示:

    # add the MathFunctions library?

    #

    if (USE_MYMATH)

    include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")

    add_subdirectory (MathFunctions)

    set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)

    endif (USE_MYMATH)

    # add the executable

    add_executable (Tutorial tutorial.cxx)

    target_link_libraries (Tutorial ${EXTRA_LIBS})

    这里使用 USE_MYMATH 来决定是否编译并使用 MathFunctions 。注意收集可执行文件的可选连接库所使用的变量(这里为 EXTRA_LIBS)的使用方法。这种方法在保持有许多可选组件的大型项目整洁时经常使用。对应的我们修改源码如下:

    // A simple program that computes the square root of a number

    #include

    #include

    #include

    #include "TutorialConfig.h"

    #ifdef USE_MYMATH

    #include "MathFunctions.h"

    #endif

    int main (int argc, char *argv[])

    {

    if (argc < 2)

    {

    fprintf(stdout,"%s Version %d.%d\n", argv[0],

    Tutorial_VERSION_MAJOR,

    Tutorial_VERSION_MINOR);

    fprintf(stdout,"Usage: %s number\n",argv[0]);

    return 1;

    }

    double inputValue = atof(argv[1]);

    #ifdef USE_MYMATH

    double outputValue = mysqrt(inputValue);

    #else

    double outputValue = sqrt(inputValue);

    #endif

    fprintf(stdout,"The square root of %g is %g\n",

    inputValue, outputValue);

    return 0;

    }

    在源码中我们同样使用了 USE_MYMATH 宏。这个宏由 CMake 通过在配置文件 TutorialConfig.h 添加以下代码传递给源码:

    #cmakedefine USE_MYMATH

    构建、编译和运行使用的代码和上一节相同。

    安装和测试(步骤3)

    下一步我们将给我们的项目添加安装规则和测试。安装规则简单明了。对于 MathFunctions 库的安装,我们通过在 MathFunction 的 CMakeLists.txt 文件中添加以下两行来设置其库和头文件的安装。

    install (TARGETS MathFunctions DESTINATION bin)

    install (FILES MathFunctions.h DESTINATION include)

    对于本文这个应用通过在顶层 CMakeLists.txt 添加以下内容来安装可执行文件和配置的头文件:

    # add the install targets

    install (TARGETS Tutorial DESTINATION bin)

    install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"

    DESTINATION include)

    以上就是安装的全部步骤。现在你应该可以编译本教程了。输入 make install(或在 IDE 中编译 install 项目),对应的头文件、库文件和可执行文件就会被安装。CMake 的 CMAKE_INSTALL_PREFIX 参数可以指定安装文件的根目录(之前还可以加上 -D 参数,具体意义可以参考 what does the parameter "-D" mean)。

    添加测试过程同样简单明了。在顶层 CMakeLists.txt 文件的最后我们可以添加一个基础测试数据来验证该应用程序是否正常运行。

    include(CTest)

    # does the application run

    add_test (TutorialRuns Tutorial 25)

    # does it sqrt of 25

    add_test (TutorialComp25 Tutorial 25)

    set_tests_properties (TutorialComp25 PROPERTIES PASS_REGULAR_EXPRESSION "25 is 5")

    # does it handle negative numbers

    add_test (TutorialNegative Tutorial -25)

    set_tests_properties (TutorialNegative PROPERTIES PASS_REGULAR_EXPRESSION "-25 is 0")

    # does it handle small numbers

    add_test (TutorialSmall Tutorial 0.0001)

    set_tests_properties (TutorialSmall PROPERTIES PASS_REGULAR_EXPRESSION "0.0001 is 0.01")

    # does the usage message work?

    add_test (TutorialUsage Tutorial)

    set_tests_properties (TutorialUsage PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number")

    在编译完成之后,我们可以运行 "ctest" 命令行工具来执行测试。第一个测试简单的验证了程序是否工作,是否有严重错误并且返回0.这是 Ctest 测试的基础。接下来的一些测试都使用了 PASS_REGULAR_EXPRESSION 测试属性(正则表达式)来验证输出中是否包含了特定的字符串。这里验证开方是否正确并且在计算错误时输出输出对应信息。如果你希望添加很多的测试来测试不同的输入值,你可以考虑定义一个像下面这样的宏:

    #define a macro to simplify adding tests, then use it

    macro (do_test arg result)

    add_test (TutorialComp${arg} Tutorial ${arg})

    set_tests_properties (TutorialComp${arg}

    PROPERTIES PASS_REGULAR_EXPRESSION ${result})

    endmacro (do_test)

    # do a bunch of result based tests

    do_test (25 "25 is 5")

    do_test (-25 "-25 is 0")

    每一次调用 do_test 就会根据指定的信息生成一个新的测试。

    该步骤对应的 build 文件夹下的构建和运行脚本 run.cmd 内容如下:

    echo off

    echo build:

    cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX=D:\project\cpp\cmake\tutorial\step3\install ..

    echo compile:

    devenv Tutorial.sln /build "Debug|x64"

    echo install:

    devenv Tutorial.sln /build "Debug|x64" /project INSTALL

    echo test:

    devenv Tutorial.sln /build "Debug|x64" /project RUN_TESTS

    安装位置根据自己的需要进行调整。

    添加系统自检(步骤 4)

    接下来我们考虑给我们的项目添加一些取决于目标平台是否有一些特性的代码。这里我们将添加一些取决于目标平台是否有 log 和 exp 函数的代码。当然对于大多数平台都会有这些函数,但这里我们认为这并不常见。如果平台有 log 函数我们将在 mysqrt 函数中使用它计算平方根。我们首先在顶层 CMakeLists.txt 文件中使用 CheckFunctionExists 宏测试这些函数是否可用,代码如下:

    # does this system provide the log and exp functions?

    include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)

    check_function_exists (log HAVE_LOG)

    check_function_exists (exp HAVE_EXP)

    接下来我们修改 TutorialConfig.h.in 文件定义一些宏以表示 CMake 是否在平台上找到这些函数:

    // does the platform provide exp and log functions?

    #cmakedefine HAVE_LOG

    #cmakedefine HAVE_EXP

    一定要在使用 configure_file 生成 TutorialConfig.h 之前测试 log 和 exp。因为 configure_file 命令会立刻使用当前 CMake 的设置配置文件。最后根据 log 和 exp 是否在我们的平台上可用我们给 mysqrt 函数提供一个可选的实现,代码如下:

    // if we have both log and exp then use them

    #if defined (HAVE_LOG) && defined (HAVE_EXP)

    result = exp(log(x)*0.5);

    #else // otherwise use an iterative approach

    . . .

    添加一个生成的文件和生成器(步骤 5)

    在这一章节我们将会展示如何在构建一个应用的过程中添加一个生成的源文件。在本例中我们将创建一个预先计算的平方根表作为构建过程的一部分,然后将其编译到我们的应用中。为了做到这一点我们首先需要一个能产生这张表的程序。在 MathFunctions 文件夹下创建一个新的名为 MakeTable.cxx 的文件,内容如下:

    // A simple program that builds a sqrt table

    #include

    #include

    #include

    int main (int argc, char *argv[])

    {

    int i;

    double result;

    // make sure we have enough arguments

    if (argc < 2)

    {

    return 1;

    }

    // open the output file

    FILE *fout = fopen(argv[1],"w");

    if (!fout)

    {

    return 1;

    }

    // create a source file with a table of square roots

    fprintf(fout,"double sqrtTable[] = {\n");

    for (i = 0; i < 10; ++i)

    {

    result = sqrt(static_cast(i));

    fprintf(fout,"%g,\n",result);

    }

    // close the table with a zero

    fprintf(fout,"0};\n");

    fclose(fout);

    return 0;

    }

    注意到这张表使用 C++ 代码生成且文件的名字通过输入参数指定。下一步通过在 MathFunctions 的 CMakeLists.txt 中添加合适的代码来构建 MakeTable 可执行文件,并将它作为构建的一部分运行。只需要一点代码就能实现这个功能:

    # first we add the executable that generates the table

    add_executable(MakeTable MakeTable.cxx)

    # add the command to generate the source code

    add_custom_command (

    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.h

    COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h

    DEPENDS MakeTable

    )

    # add the binary tree directory to the search path for

    # include files

    include_directories( ${CMAKE_CURRENT_BINARY_DIR} )

    # add the main library

    add_library(MathFunctions mysqrt.cxx ${CMAKE_CURRENT_BINARY_DIR}/Table.h )

    首先添加的 MakeTable 可执行文件和其它可执行文件相同。接下来我们添加一个自定义的命令来指定如何通过运行 MakeTable 生成 Table.h 文件。接下来我们必须让 CMake 知道 mysqrt.cxx 依赖于生成的 Table.h 文件。这一点通过将生成的 Table.h 文件添加到 MathFunctions 库的源文件列表实现。我们同样必须将当前二进制文件路径添加到包含路径中,以保证 Table.h 文件被找到并被 mysqrt.cxx 包含。该项目在构建时会首先构建 MakeTable 可执行文件。接下来会运行该可执行文件并生成 Table.h 文件。最后它将会编译包含 Table.h 的 mysqrt.cxx 文件并生成 MathFunctions 库。此时包含了所有我们添加的特性的顶层 CMakeLists.txt 文件应该像下面这样:

    cmake_minimum_required (VERSION 2.6)

    project (Tutorial)

    include(CTest)

    # The version number.

    set (Tutorial_VERSION_MAJOR 1)

    set (Tutorial_VERSION_MINOR 0)

    # does this system provide the log and exp functions?

    include (${CMAKE_ROOT}/Modules/CheckFunctionExists.cmake)

    check_function_exists (log HAVE_LOG)

    check_function_exists (exp HAVE_EXP)

    # should we use our own math functions

    option(USE_MYMATH

    "Use tutorial provided math implementation" ON)

    # configure a header file to pass some of the CMake settings

    # to the source code

    configure_file (

    "${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"

    "${PROJECT_BINARY_DIR}/TutorialConfig.h"

    )

    # add the binary tree to the search path for include files

    # so that we will find TutorialConfig.h

    include_directories ("${PROJECT_BINARY_DIR}")

    # add the MathFunctions library?

    if (USE_MYMATH)

    include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")

    add_subdirectory (MathFunctions)

    set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)

    endif (USE_MYMATH)

    # add the executable

    add_executable (Tutorial tutorial.cxx)

    target_link_libraries (Tutorial ${EXTRA_LIBS})

    # add the install targets

    install (TARGETS Tutorial DESTINATION bin)

    install (FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"

    DESTINATION include)

    # does the application run

    add_test (TutorialRuns Tutorial 25)

    # does the usage message work?

    add_test (TutorialUsage Tutorial)

    set_tests_properties (TutorialUsage

    PROPERTIES

    PASS_REGULAR_EXPRESSION "Usage:.*number"

    )

    #define a macro to simplify adding tests

    macro (do_test arg result)

    add_test (TutorialComp${arg} Tutorial ${arg})

    set_tests_properties (TutorialComp${arg}

    PROPERTIES PASS_REGULAR_EXPRESSION ${result}

    )

    endmacro (do_test)

    # do a bunch of result based tests

    do_test (4 "4 is 2")

    do_test (9 "9 is 3")

    do_test (5 "5 is 2.236")

    do_test (7 "7 is 2.645")

    do_test (25 "25 is 5")

    do_test (-25 "-25 is 0")

    do_test (0.0001 "0.0001 is 0.01")

    TutorialConfig.h 文件如下:

    // the configured options and settings for Tutorial

    #define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@

    #define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@

    #cmakedefine USE_MYMATH

    // does the platform provide exp and log functions?

    #cmakedefine HAVE_LOG

    #cmakedefine HAVE_EXP

    最后 MathFunctions 的 CMakeLists.txt 文件如下:

    # first we add the executable that generates the table

    add_executable(MakeTable MakeTable.cxx)

    # add the command to generate the source code

    add_custom_command (

    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.h

    DEPENDS MakeTable

    COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h

    )

    # add the binary tree directory to the search path

    # for include files

    include_directories( ${CMAKE_CURRENT_BINARY_DIR} )

    # add the main library

    add_library(MathFunctions mysqrt.cxx ${CMAKE_CURRENT_BINARY_DIR}/Table.h)

    install (TARGETS MathFunctions DESTINATION bin)

    install (FILES MathFunctions.h DESTINATION include)

    构造一个安装器(步骤 6)

    接下来假设我们想将我们的项目发布给其他人以便供他们使用。我们想提供在不同平台上的二进制文件和源码的发布版本。这一点和我们在之前安装和测试章节(步骤3)略有不同,步骤三安装的二进制文件是我们从源码构建的。这里我们将构建一个支持二进制文件安装的安装包和可以在 cygwin,debian,RPMs 等中被找到的安装管理特性。为了实现这一点我们将使用 CPack 来创建在 Packaging with CPack 章节中介绍过的平台特定安装器(platform specific installers)。我们需要在顶层 CMakeLists.txt 文件添加以下几行内容:

    # build a CPack driven installer package

    include (InstallRequiredSystemLibraries)

    set (CPACK_RESOURCE_FILE_LICENSE

    "${CMAKE_CURRENT_SOURCE_DIR}/License.txt")

    set (CPACK_PACKAGE_VERSION_MAJOR "${Tutorial_VERSION_MAJOR}")

    set (CPACK_PACKAGE_VERSION_MINOR "${Tutorial_VERSION_MINOR}")

    include (CPack)

    首先我们添加了 InstallRequiredSystemLibraries。该模块会包含我们项目在当前平台所需的所有运行时库(runtime libraries)。接下来我们设置了一些 CPack 变量来指定我们项目的许可文件和版本信息。版本信息使用我们在之前设置的内容。最后我们包含 CPack 模块,它会使用这些变量和其它你安装一个应用程序所需的系统属性。

    接下来就是正常编译你的项目然后使用 CPack 运行它,为了编译二进制发布版本你需要运行:

    cpack --config CPackConfig.cmake

    创建一个源文件发布版本你应该使用下面命令:

    cpack --config CPackSourceConfig.cmake

    Windows 平台下CMake 默认会使用 NSIS 创建安装包,因此我们在执行上面命令前需要安装该软件。当然我们也可以使用 WiX 包安装工具,只需要在 include(CPack) 之前加上 set(CPACK_GENERATOR WIX) 即可。安装包工具的选择和对比可以参考 NISS Vs WiX Vs AnyOther Installation Package 。

    添加表盘工具(Dashboard)支持(步骤7)

    添加将我们测试结果提交到仪表盘的功能非常简单。在本教程的之前步骤中我们已经给我们的项目定义了一些测试。我们只需要运行这些测试然后提交到仪表盘即可。为了支持仪表盘功能我们需要在顶层 CMakeLists.txt 文件中增加 CTest 模块。

    # enable dashboard scripting

    include (CTest)

    我们同样可以创建一个 CTestConfig.cmake 文件来在表盘工具中指定本项目的名字。

    set (CTEST_PROJECT_NAME "Tutorial")

    CTest 会在运行时读取该文件。你可以在你的项目上运行 CMake 来创建一个简单的仪表盘,切换目录到二进制文件夹下,然后运行 ctest -DExperimental.你仪表盘的运行结果会上传到 Kitware 的公共仪表盘上 这里。

    如果需要上传的话还需要设置 Drop site ,具体细节可以参考官方的 ctest(1) 。

    展开全文
  • First of all download the source from here: https://cmake.org/download/More specificly for Ubuntu 14.04 or higher, 64 bit: https://cmake.org/files/v3.5/cmake-3.5.2.tar.gzDownload it to the followi...

    First of all download the source from here: https://cmake.org/download/

    More specificly for Ubuntu 14.04 or higher, 64 bit: https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz

    Download it to the following directory (or any directory you like!) /opt/dev-tools-sources

    Unzip it there, using gui or command line $tar -zxvf cmake-3.5.2.tar.gz 1 $tar -zxvf cmake-3.5.2.tar.gz

    You should have now a folder like this /opt/dev-tools-sources/cmake-3.5.2 1

    /opt/dev-tools-sources/cmake-3.5.2

    Go to this folder $cd /opt/dev-tools-sources/cmake-3.5.2 1 $cd /opt/dev-tools-sources/cmake-3.5.2

    Install openssl to allow CMAKE have access to ssl protected websites if it needs to download extra files $sudo apt install openssl libssl-dev 1 $sudo apt install openssl libssl-dev

    Edit the bootstrap file and change the line: cmake_options=”-DCMAKE_BOOTSTRAP=1″ 1

    cmake_options=”-DCMAKE_BOOTSTRAP=1″

    To this cmake_options=”-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON” 1

    cmake_options=”-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON”

    If you want cmake-gui, you will need qt4 libs an ncurses $sudo apt install libqt4-dev qt4-dev-tools libncurses5-dev 1 $sudo apt install libqt4-dev qt4-dev-tools libncurses5-dev

    Run the configuration (you need to have gcc and g++ 4.7 or higher installed. I recommend 4.8.4 or higher actually!) $./configure –qt-gui 1 $./configure –qt-gui

    Make sure in the generated CMakeCache.txt, GUI is set to TRUE, open CMakeCache.txt with any editor and check the following line: BUILD_QtDialog:BOOL=ON 1 BUILD_QtDialog:BOOL=ON

    If it was OFF or 0, make it ON or 1

    It is time to build executables and libraries from source: $make -j2 1 $make -j2

    Now, install: $sudo make install 1 $sudo make install

    Confirm you got gui version also $cmake-gui 1 $cmake-gui

    ENJOY!

    展开全文
  • cmake系列使用教程】这个系列的文章翻译自官方cmake教程cmake tutorial。不会仅仅停留在官方教程。本人作为一个安卓开发者,实在是没有linux c程序开发经验,望大佬们海涵。教程是在macos下完成,大部分linux我...
  • 前言想把开发环境转移到Linux上,同时也准备阅读些GitHub上的开源代码,开源项目一般都是用cmake管理的。cmake所做的事其实就是告诉编译器如何去编译链接源代码。你也许想问不是有makefile吗,为什么还要它?这里就...
  • CMake安装使用教程

    2020-12-23 11:16:25
    CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅...
  • 引用 https://cmake.org/runningcmake/ https://cmake.org/cmake-tutorial/ http://www.hahack.com/codes/cmake/ ... cmake可以用来构建跨平台的项目,本文简要讲解针对多目录源码...
  • 也可以用CMakegui版本进行图形化操作,本博客就是介绍的camke-gui版的使用教程。 软件安装 CMake安装包下载 :链接 http://www.cmake.org/cmake/resources/software.html 双击下载好的安装包,按照提示就...
  • cmake安装与使用

    2021-02-01 00:32:35
    使用指定名为CMakeLists.txt的配置文件可以控制软件的构建、测试和打包等流程。通过编写平台无关的CMakeLists.txt文件和需要简单的配置,CMake就能生成对应目标平台的构建文件1.安装(1)Linux所有主流的Linux发行版的...
  • 使用cmake-gui编译libzmq2.1 安装cmake-gui2.2 编译2.3 vs2017打开工程2.4 注意事项3.vs2017直接编译zeromq-x-master 1. 前言 最近一段时间项目里在用ZeroMQ消息队列,正好有个同事想用下现成的库,索性在此记录下...
  • CMake教程

    2021-01-13 22:29:50
    CMake 教程 01介绍这篇CMake教程提供了手把手的指导,涵盖了CMake中大部分构建问题。查看示例项目中的不同主题一起工作非常有用的。这个教程文档和示例可以在CMake提供的源代码的Help/guide/tutorial目录中找到。每...
  • OpenCV 2.2以后的版本需要使用Cmake生成makefile文件,因此需要先安装cmake;还有其它一些软件都需要先安装cmake1.在linux环境下打开网页浏览器,输入网址:http://www.cmake.org/cmake/resources/software.html,...
  • cmake使用教程

    万次阅读 多人点赞 2018-11-16 08:34:27
    可以在CMake的安装路径下的bin文件夹中找到CMakegui,如图所示。 打开后就可以进入guiGui界面如图所示,在Where is the source code后面的小白框中添加你所下载的源码路径,并且确保你将CMakeLists.txt...
  • 很多 linux 和 windows 平台通用的第三方库喜欢使用 CMAKE 来管理整个工程文件,当我们...而在 windows 下配置该库难度就比较麻烦,一般使用 cmake-gui 进行配置,生成对应开发环境的工程(比如VS2010、VS2015、Min...
  • CMake--使用教程基础篇

    2020-12-23 09:53:11
    简介Cmake非常好的一个工具,可跨平台使用,是进行项目构建的一把好手,对于一个工具而言,还是要以使用目的为导向的,掌握最实用,应用范围最广的功能即可。安装作为跨平台应用,谈到安装的话,就需要考虑Linux与...
  • 在 windows 下配置该库难度就比较麻烦,一般使用 cmake-gui 进行配置,生成对应开发环境的工程(比如VS2010、VS2015、MinGW 之类的),这里描述一下使用 CMAKE-gui 编译配置第三方库的通常的过程。
  • 这里我主要使用CMake-gui这个图形化界面进行安装(因为自己对ubuntu的命令不太熟悉…总是出错但又不知道怎么解决掉)。当然,也可以用终端直接输入命令操作,可以参考其他博客,这里就不再讨论。 二、下载和添加依赖...
  • Cmake-gui图形界面 比命令行好用, 先安装Cmake-gui 图形化界面 sudo apt-get install cmake-qt-gui 打开界面 sudo cmake-gui   然后根据下面的博客安装 原文写的很详细了,适合新人 ,就转了过来 ...
  • 【学习cmakeCMake初步使用教程

    千次阅读 2017-12-20 10:39:17
    CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名...
  • 然后CMake即载入默认配置,如下图所示: 窗口的中间部分即配置列表,这里和使用cmake命令直接生成makefile文件一致的。正如上文所述,这里通过图形界面的方式来进行配置,更加直观方便。 6、这里需要对两个地方进行...
  • cmake使用入门教程

    2019-08-20 13:45:18
    一、为什么要使用cmake CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的...
  • 【安装教程】Ubuntu16.04中用CMake-gui安装OpenCV3.2.0和OpenCV_contrib-3.2.0(图文) 2018年05月21日 21:13:45 lalulaBar 阅读数:3747 初次尝试在Ubuntu上面安装OpenCV,遇到了各种奇奇怪怪的问题,也查了...
  • CMake - 使用教程

    2019-12-04 11:14:26
    CMake - 使用教程(原文) 这份渐进式的教程涵盖了 CMake 帮助处理的一些常见的构建问题。许多议题已经在《Mastering CMake》中作为独立的话题介绍过,但是了解它们是如何在示例项目中结合在一起的将非常有帮助。你...
  • 主要介绍了linux下使用cmake编译安装mysql的详细教程,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 用于结合VS2015进行编译Openpose的第三方库文件,生成.sln文件再从VS2015中运行OpenPose!!
  • 网上关于ubantu下安装opencv-2.4.9的教程有很多,不论是利用cmake指令进行安装还是cmake-gui安装也有不少,但是都各自有一些缺陷,我经过一些尝试之后终于在树莓派debian系统下安装成功opencv-2.4.9。 一、更新和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,133
精华内容 1,253
关键字:

cmakegui使用教程