必威官网登录-betway必威官网|体育在线

热门关键词: 必威体育,betway必威官网,必威官网登录,必威app下载

  CMake使用名字为CMakeLists.txt的文件,内容如下

作者: 计算机网络  发布:2019-10-08

如果需要配置和检查我们工程中的所有依赖,那么可以选用CMake工具;但是,这并不是必须的,因为我们可以使用其他的工具或者是IDE(比如Makefiles或者Visual Studio)来配置我们的工程。然而,CMake是最好移植的方式来配置多平台的C++项目。

如果你觉得makefile看着就头痛,如果当工程越来越大,你越来越手足无措,如果你厌倦了在编译的时候打上一大堆命令,那么你有必要花十分钟来看一下下面的内容。

1. 基本用法

一、HelloWorld

  CMake使用名称为CMakeLists.txt的文件,其中定义了编译和依赖处理等过程。对于一个基本的项目而言,从一个源码文件构建一个可执行程序只需要中CMakeLists.txt文件中添加两行代码即可。文件内容像下面这样:

首先创建一个test1文件夹,里面创建一个main.c文件,内容如下:

cmake_minimum_required (VERSION 2.6)
project (CMakeTest)
add_executable (${PROJECT_NAME} main.cpp)

#include <stdio.h>
int main()
{
 printf("Hello World!n");
 return 0;
}

  文件的第一行定义了所需的CMake版本的最小值,这一行是强制添加在CMakeLists.txt文件中,其拥有指定了从第二行开始可以使用的给定版本所定义的cmake函数;第二行的project函数用于定义工程名(这里为CMakeTest),这个名字被保存在一个名为PROJECT_NAME的变量中。最后一行,在main.cpp文件中创建一个可执行命令(add_executable()),它的名字和工程名称(${PROJECT_NAME})相同,然后将源代码编译到名称为CMakeTest的可执行文件中,也就是将可执行文件名设置为与工程名相同。${}表达式允许访问环境中定义的任何变量,因此,我们可以使用${PROJECT_NAME}变量作为一个可执行程序的输出名。假设这里的main.cpp文件是一个简单的Hello World程序,代码如下:

再创建一个CMakeLists.txt

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    cout << "Hello World! " << argc << argv[0] << endl;
    return 0;
}

PROJECT (HELLO)
SET(SRC_LIST main.c)
ADD_EXECUTABLE(hello ${SRC_LIST})

将这两个文件放置在同一目录下,然后依次执行如下命令:

第一行:设置项目名称;

cmake .
make

第二行:将SRC_LIST值设置为main.c

这样,我们就可以在当前目录下面看到一个名称为CMakeTest的可执行文件了。

第三行:生成可执行文件 hello。 ${} 是引用某个值。

2. 创建库文件(Creating a library)

Terminal中cd进入到test1目录,创建一个build目录用于外部构建(编译所产生的文件都生成在build目录),依次执行下面三条命令:

  CMake允许你创建库文件,可以被OpenCV编译系统使用。软件开发过程中,在多个应用之间共享代码是一种通用并且实用的实践。在大型应用中,或者是当相同的代码在多个应用中共享时,这种使用方式非常有用。

cmake ..
make
./hello

  在这种情况下,我们不需要创建一个二进制可执行文件;取而代之,我们创建一个编译好的文件,其中包含了所有的函数、类等等,使用它来开发。我们可以将这个库文件与其它应用共享,而不需要共享我们的源代码。CMake中包含了一个add_library()函数来实现此目的:

得到的结果如下:

# Create our hello library
add_library(Hello hello.cpp hello.h)
# Create our application that uses our new library
add_executable(executable main.cpp)
# Link our executable with the new library
target_link_libraries(executable Hello)

图片 1

  以“#”开头的行为注释行,这些行会被CMake忽略掉。

如果要引用内部库的话,比如是关于SDL和opengl的程序,需要在CMakeLists.txt中添加

  命令add_library(Hello hello.cpp hello.h)定义了我们新创建的库的名称,库名称为Hello,而hello.cpp和hello.h是库的源文件。我们添加头文件以允许IDE链接到这些头文件。执行这一行命令将会产生一个共享文件(在OS X或者Unix下生成一个*.so文件,在Windows下生成*.dll文件),这取决于我们所使用的操作系统,或者是要创建动态库还是静态库。

TARGET_LINK_LIBRARIES(hello SDL)
TARGET_LINK_LIBRARIES(hello GLU)

  target_link_libraries(executable Hello)用于链接我们的可执行文件executable到目标库,在这里,将会链接到Hello库中。

对应终端的编译命令就是:

  假设我们在hello.cpp中定义一个say()函数用于输出字符串,在hello.h文件中添加此函数的声明:

-lSDL -lGLU

图片 2

若不是引用内部库,则需要将相应目录添加进来,用到的是INCLUDE_DIRECTORIES命令。

1 #include <iostream>
2 #include "hello.h"
3
4 void say(std::string text)
5 {
6    std::cout << text << std::endl;
7 }

二、库的构建与安装

 

这次我们的目标是:

hello.cpp

1,建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用,HelloFunc 向终端输出

图片 3

Hello World 字符串。

#ifndef __HELLO_H__
#define __HELLO_H__
#include <string>
void say(std::string text);
#endif

2,安装头文件与共享库。

hello.h

目录安排如下:

  然后,我们在main.cpp中添加hello.h头文件声明,然后引用Hello库中定义的say()函数,代码如下:

图片 4

图片 5

build-用于外部编译;

1 #include "hello.h"
2
3 int main()
4 {
5    say("I can say Hello!");
6    return 0;
7 }

libhello-hello库的源文件;

main.cpp

src-主程序

  最后,依次执行“cmake .”和“make”命令,就可以看到最终生成的可执行文件了,点击运行查看效果。

首先看libhello里的文件:

3. 管理依赖(Managing dependencies)

/*filename:hello.h*/
#ifndef DBZHANG_HELLO_
#define DBZHANG_HELLO_
void hello(const char* name);
#endif //DBZHANG_HELLO_

  CMake具有搜索我们的依赖文件以及外部库的能力,它为我们提供了编译复杂工程的基础设施,

 

本文由betway必威官网发布于计算机网络,转载请注明出处:  CMake使用名字为CMakeLists.txt的文件,内容如下

关键词: