Linux之CMake实例演示
Posted 菠萝印象威
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之CMake实例演示相关的知识,希望对你有一定的参考价值。
一.CMake简介
在Windows中,我们可以使用IDLE环境来编译我们的代码,比如visual studio、vc++6.0等,这些已经将编译的过程集成进开发环境中了。但是在其它平台上,并没有这些开发环境,所以需要我们手动编译。CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。
程序生成过程:
二.实例演示使用CMake编译可执行程序
单目录单源文件
创建两个文件Test.cc和CMakeLists.txt
Test.cc
#include <stdio.h>
#include <stdlib.h>
double Add(double x, double y)
{
double result=x+y;
return result;
}
int main(int argc, char *argv[])
{
if (argc < 3){
printf("Usage: %s value \\n", argv[0]);
return 1;
}
double x = atof(argv[1]);
double y = atof(argv[2]);
double result = Add(x,y);
printf("%g + %g is %g\\n", x, y, result);
return 0;
}
CMakeLists.txt:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Test1)
# 指定生成目标
add_executable(Test Test.cc)
当前目录内容:
在当前目录下执行cmake .
会生成一些文件,其中有Makefile
打开Makefile可以看出编译的一些规则
这时,可以使用make命令运行Makefile使其自动编译
可以看到,生成Test目标程序
当前目录运行程序:
以上为简单的单个源文件使用CMake生成可执行程序,但,大部分情况不止一个源文件。
单目录多源文件
CMakeLists.txt:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Test2)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 指定生成目标
add_executable(Test ${DIR_SRCS})
CMakeLists.txt里使用变量的方式记录当前目录下的所有源文件,编译时会自动查找对应的源文件。
Test.cc:
#include <stdio.h>
#include <stdlib.h>
#include "Testfun.h"
int main(int argc, char *argv[])
{
if (argc < 3){
printf("Usage: %s value \\n", argv[0]);
return 1;
}
double x = atof(argv[1]);
double y = atof(argv[2]);
double result = Add(x,y);
printf("%g + %g is %g\\n", x, y, result);
return 0;
}
这里Test.cc里只有main函数
Testfun.cc:
#include <stdio.h>
#include <stdlib.h>
double Add(double x, double y)
{
double result=x+y;
return result;
}
Testfun.h:
#ifndef ADD_H
#define ADD_H
extern double Add(double x, double y);
#endif
当前目录下的内容为:
编译:
此时生成Test可执行程序
运行
多个目录,多个源文件
将Testfun.cc和Testfun.h移入math目录
根目录文件为:
根目录中的CMakeLists.txt:
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Test3)
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加 math 子目录
add_subdirectory(math)
# 指定生成目标
add_executable(Test Test.cc)
# 添加链接库
target_link_libraries(Test Testfun)
根目录中的Test.cc
#include <stdio.h>
#include <stdlib.h>
#include "math/Testfun.h"
int main(int argc, char *argv[])
{
if (argc < 3){
printf("Usage: %s value \\n", argv[0]);
return 1;
}
double x = atof(argv[1]);
double y = atof(argv[2]);
double result = Add(x,y);
printf("%g + %g is %g\\n", x, y, result);
return 0;
}
math中文件为:
math目录中的CMakeLists.txt:
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library (Testfun ${DIR_LIB_SRCS})
math目录中的Testfun.cc:
#include <stdio.h>
#include <stdlib.h>
double Add(double x, double y)
{
double result=x+y;
return result;
}
math目录中的Testfun.h:
#ifndef ADD_H
#define ADD_H
extern double Add(double x, double y);
#endif
先将math目录里的文件编译成静态库再由 main 函数调用
编译:
运行结果:
以上是关于Linux之CMake实例演示的主要内容,如果未能解决你的问题,请参考以下文章
linux之Shell编程--Shell流程控制语句实例演示
Linux之Shell编程(11)--Shell函数实例演示