11下的初体验

2019-11-11 19:29 来源:未知

Cmake新手使用日记(1卡塔 尔(英语:State of Qatar)【C++11下的初体验】,cmake11下

  第贰回使用Cmake,寻找了无数施用教程,饱含《Cmake实践》、《Cmake手册》等,可是在针对最新的C++11尺度下编制程序照旧会设有一小点标题,要求尝试很多次错误并寻找大批量稿子手艺消弭难题。这里用生手日记的方法告知一个Cmake小白怎么样在C++11下行使Cmake。

  经常景况下,直接阅读文书档案会不太适应新手,未有感官的认知,未有经验。这里将和煦的学习进程记录下来,方便温馨查阅,也利于别的生手学习。

  意气风发、单文件编写翻译

  (1卡塔尔操作进程

  <1>创制一个目录t1.  

  <2>编写代码:

  main.cpp

 1 #include <iostream>
 2 #include <vector>
 3 int main()
 4 {
 5 
 6         using namespace std;
 7         vector<int> V(5,3);
 8         for(auto e:V)
 9                 cout << e << endl;
10         cout << "OK" << endl;
11         return 0;
12 
13 }

  <3>编写CMakeLists.txt

  【注意】不忘记记“CMakeLists.txt”中“.”前还会有一个“s”,假如您很马虎,推断会在此边无可如何。

  

PROJECT (HELLO)

SET(CMAKE_C_COMPILER g++)
if(CMAKE_COMPILER_IS_GNUCXX)
   add_compile_options(-std=c++11)
endif(CMAKE_COMPILER_IS_GNUCXX)

SET(SRC_LIST main.cpp)
ADD_EXECUTABLE(hello ${SRC_LIST})

  <4>在t1文件夹下编写翻译

  先运行

  

Cmake .

  再运行

  

make

  <5>运路程序  

  那时,再t1文件夹下会发生hello文件,运营

./hello

次第就不错运维啦。

  输出

@ubuntu:~/t1$ ./hello
3
3
3
3
3
OK

 

  (2卡塔尔进程解释

  首先,在CMakeLists.txt中,命令能够动用大写、小写、混写。

  PROJECT (HELLO)是CMakeLists.txt的首先句,告诉编写翻译器那一个工程称为hello。

  SET(CMAKE_C_COMPILEEscortg++)证明使用g++编写翻译器,因为只假诺.c文件的话常常选择暗中认可的gcc编写翻译器。

  add_compile_options(-std=c++11)告诉编写翻译器使用的是c++11,不过如若不安装g++编写翻译器,又不决断一下编写翻译器的话会产出上边包车型地铁运作结果:

@ubuntu:~/t1$ make
Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/main.o
c++: error: unrecognized command line option ‘-std=C++11’
CMakeFiles/hello.dir/build.make:62: recipe for target 'CMakeFiles/hello.dir/main.o' failed
make[2]: *** [CMakeFiles/hello.dir/main.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/hello.dir/all' failed
make[1]: *** [CMakeFiles/hello.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

  有的博客里说能够编写翻译完毕,不过在那间一时候就完不成。当然不时候也能完结,这些只怕和实际的系统有关呢。

  当现身上述难点时,能够利用安装编写翻译器的点子解决,也得以接受if语句进行决断,这里为了能够将具有景况都讲驾驭,就一时画蛇添足这些写了。当中CMAKE_COMPILER_IS_GNUCXX用于判别编译器类型。

  可是作者也遇上那样的主题素材,借使不安装编写翻译器为g++,第4回设置编写翻译器为std=c++11属性时报错,不过只要设置达成功运营之后,就算吧编写翻译器设置的语句去掉,把t1上面除了main.cpp和CMakeLists.txt之外的语句去掉,也能健康编写翻译。真的有些意想不到。

  接着SET(SRC_LIST main.cpp) 和ADD_EXECUTABLE(hello ${SRC_LIST}) 语句。定义了这么些工程会转移叁个文本名称为 hello 的可推行文件,相关的源文件是 SRC_LIST 中 定义的源文件列表, 本例中也能够一贯写成 ADD_EXECUTABLE(hello main.c)。

  ${}来援用变量,那是 cmake 的变量应用措施,不过,有风流倜傥部分两样,比 如在 IF 调整语句,变量是直接行使变量名引用(如这里的CMAKE_COMPILER_IS_GNUCXX卡塔 尔(阿拉伯语:قطر‎,而无需${}。如若采取了${}去选拔变量,其实 IF 会去判断名叫${}所代表的值的变量,那当然是空中楼阁的了。

  (3卡塔尔一点只顾

  在CMakeLists.txt脚本中,设置编译选项能够透过add_compile_options一声令下,也足以通过set命令纠正CMAKE_CXX_FLAGSCMAKE_C_FLAGS。 

  使用那二种方法在部分情况下效果是相像的,但请小心它们照旧有分别的: 
add_compile_options指令增添的编写翻译选项是指向富有编写翻译器的(包涵c和c++编写翻译器),而set命令设置CMAKE_C_FLAGSCMAKE_CXX_FLAGS变量则是个别只针对c和c++编译器的。因而,下边包车型地铁代码也是如出大器晚成辙的成效哦!

PROJECT (HELLO)

SET(CMAKE_C_COMPILER g++)
if(CMAKE_COMPILER_IS_GNUCXX)
   set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
endif(CMAKE_COMPILER_IS_GNUCXX)

SET(SRC_LIST main.cpp)
ADD_EXECUTABLE(hello ${SRC_LIST})

 

第四回选择Cmake,找出了无数选择教程,富含《Cmake施行》、《Cmake手册》等,可是在针...

TAG标签:
版权声明:本文由990888藏宝阁发布于计算机网络,转载请注明出处:11下的初体验