CMake是编写C/C++常用的文件构建工具,掌握它的编写规则对于理解工程至关重要。本文只是简单的cmake入门,更多详细的内容可以参考网上的资料。这里使用的kdevelop作为开发工具,读者也可以选用vim或者visual studio都可以。具体的kdevelop可以参考此文 kdevelop安装使用运行。
创建Hello工程,工程中包含两个文件main.cpp
#include <iostream>
int main(int argc, char **argv) {
std::cout << "Hello, world!" << std::endl;
return 0;
}
和工程构建文件CMakeLists.txtmain.cpp是很简单的cpp示例,工程文件中add_executable表示使用后面的main.cpp文件,生成hello可执行文件,其余两句话可以不写。
cmake_minimum_required(VERSION 3.7)
project(hello)
add_executable(hello main.cpp)
install(TARGETS hello RUNTIME DESTINATION bin)
在终端中可以新建一个build文件夹,然后按照下面的操作步骤进行。
wang@wang:~/projects/Hello/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wang/projects/Hello/build
wang@wang:~/projects/Hello/build$ make
Scanning dependencies of target hello
[ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[100%] Linking CXX executable hello
[100%] Built target hello
wang@wang:~/projects/Hello/build$ ./hello
Hello, world!
最终可以看到执行成功,最简单的CMakeLists.txt已经写完。
接下来向工程中增加动态库运行,写一个计算圆面积的代码,把圆的面积计算单独放入一个文件中。新建两个文件circle.h
double circleArea(double r);
只有一句函数申明,然后新建circle.cpp文件,定义圆面积的计算公式
#include "circle.h"
const double PI = 3.14159265358979323846;
double circleArea(double r)
{
return PI * r * r;
}
main.cpp如下所示
#include <iostream>
#include "circle.h"
int main(int argc, char **argv) {
double area = circleArea(5);
std::cout << "The area of a circle of radius 5 is " << area << std::endl;
return 0;
}
CMakeLists.txt文件,增加了两行代码,add_library表示添加一个动态库,前面的参数表示库名字,后面的参数是源文件。
target_link_libraries是对动态库的链接。
cmake_minimum_required(VERSION 3.7)
project(circlearea)
add_library(circle circle.cpp)
add_executable(circlearea main.cpp)
target_link_libraries(circlearea circle)
install(TARGETS circlearea RUNTIME DESTINATION bin)
运行效果
wang@wang:~/projects/CircleArea$ cd build/
wang@wang:~/projects/CircleArea/build$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wang/projects/CircleArea/build
wang@wang:~/projects/CircleArea/build$ make
[ 50%] Built target circle
[100%] Built target circlearea
wang@wang:~/projects/CircleArea/build$ ./circlearea
The area of a circle of radius 5 is 78.5398
如果觉得这篇文章有用,可以扫免费红包支持。