步骤:
1、创建项目文件夹,包括源文件和生成文件夹
如:test, test-bin,
前者test用于存放源代码(c++),CMakeLists.txt的cmake配置文件
后者test-bin用于存放经过cmake编译后生成的文件(工程文件.sln等)
2、编写源代码文件和CMakeLists.txt文件
Cmake基本语法
注:cmake命令最好大写
1.# 表示注释
2.变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用
变量名引用;后续的set命令会清理变量原来的值;
https://www.wendangku.net/doc/c617722005.html,mand (args ...) #命令不分大小写,参数使用空格分隔,使用双引号引起参数中
空格
4.set(var a;b;c) <=> set(var a b c) #定义变量var并赋值为a;b;c这样一个string list
5.Add_executable(${var}) <=> Add_executable(a b c) #变量使用${xxx}引用
6.条件语句:
if(var) #var 非empty 0 N No OFF FALSE... #非运算使用NOT
…
else()/elseif() … endif(var)
7.循环语句
Set(VAR a b c)
Foreach(f ${VAR}) …Endforeach(f)
8.循环语句
WHILE() … ENDWHILE()
Cmake命令:
链接来源:https://www.wendangku.net/doc/c617722005.html,/netnote/article/details/4051620
1、PROJECT(HELLO) #指定项目名称,生成项目名称
使用${HELLO_SOURCE_DIR}表示项目根目录
2、INCLUDE_DIRECTORIES #指定头文件的搜索路径
INCLUDE_DIRECTORIES(${HELLO_SOURCE_DIR}) #指定HELLO项目源文件根目录
3、TARGET_LINK_LIBRARIES #添加链接库
TARGET_LINK_LIBRARIES (HELLO ${ITK_LIBRARIES} )
#将可执行文件与ITK_LIBRARIES链接成最终文件HELLO
4、ADD_EXECUTABLE #编译可执行程序,指定编译
ADD_EXECUTABLE(HELLO hello.cxx ) #将hello.cxx编译成可执行文件
CMakeLists.txt (cmake配置文件)
#注明cmake最低版本要求,不写会报错或警告
cmake_minimum_required(VERSION 2.8)
#定义项目名称为SHOWPIC,和可执行文件showpic没有任何关系
PROJECT(SHOWPIC)
#找ITK的包,如果找到就加载进来
FIND_PACKAGE(ITK)
IF(ITK_FOUND)
INCLUDE(${USE_ITK_FILE})
ENDIF(ITK_FOUND)
#指定SHOPIC项目源文件根目录的搜索路径
INCLUDE_DIRECTORIES(${SHOWPIC_SOURCE_DIR})
#指定编译可执行程序,将showpic.cxx编译成可执行文件
ADD_EXECUTABLE(SHOWPIC showpic.cxx)
#将可执行文件与ITK_LIBRARIES链接成最终文件SHOWPIC
TARGET_LINK_LIBRARIES (SHOWPIC ${ITK_LIBRARIES} )
Showpic.cxx (cxx中的x是x,y,z的x)
#include"itkImage.h"
#include"itkImageFileReader.h"
#include"itkImageFileWriter.h"
int main( int , char * argv[])
{
//通过指定表示图像的像素和维数的值来定义图像的类型。
typedef unsigned char PixelType;
const unsigned int Dimension = 2;
typedef itk::Image< PixelType, Dimension > ImageType;
//以reader 和writer的类型为例,这两个类通过图像类型被参数化:
typedef itk::ImageFileReader< ImageType > ReaderType;
typedef itk::ImageFileWriter< ImageType > WriterType;
//用New( ) 函数并把结果赋值给一个itk::SmartPointer 来创建每个类型的对象
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New( );
//被读或写的文件名用SetFileName( )函数传递
reader->SetFileName( "D:\\1.jpg" );
writer->SetFileName( "D:\\itk\\showpic\\2.jpg" );
//由于Reader 的输出并未连接到其他的滤镜,所以在目前的例子中我们必须精确//地调用//Updata( )方法。
//对Reader 调用更新:
reader->Update();
//直接传递reader 的输出给writer的输入来创建一个短数据通道:writer->SetInput( reader->GetOutput() );
//数据通道的执行被最后对象的Update( )触发。在这个情况下,最终的数据通道对象是writer。在通道被执行时,最明智的自我保护程序的做法是在一个try/catch 模块中插入Update( ) 以抛出异常。
try
{
writer->Update();
}
catch( itk::ExceptionObject & err )
{
std::cerr << "ExceptionObject caught !" << std::endl; std::cerr << err << std::endl;
return EXIT_FAILURE;
}
return 0;
}
3、用CMAKE进行配置编译
打开cmake软件
Where is the source code:(源文件路径):D:/ITK/showpic/showpic
Where to build the binaries:(生成文件存放路径):D:/ITK/showpic/showpic-bin
点击后状态如下图
接着,显示第一次配置完成,但上面部分为红色,应该继续点击configure,直到红色部分变白
再次点击之后效果:
接着,点击旁边的:Generate 生成
4、在编译器visual stdio 2010中进行编译
首先,找到showpic-bin目录,里面已经生成了工程项目,打开它,找到SHOWPIC.sln文件(工程文件),双击打开
进入了vs10界面
5、查看结果:
首先,源程序(showpic.cxx)中的reader->SetFileName(“D:\\1.jgp”);(查看该段代码)
图片1.jgp就存放在D盘目录下,如图所示
读入和输出之后的图片名2.jpg,则存放在:D:\ITK\showpic
对比效果:
6、遇到问题分析:
(1)在cmake编译过程中可能会报错,一般都是CMakeLists.txt文件没有配置好,字母写错或不应该小写(cmake命令)。
如果解决不了,重新进行编译,不过要先将showpic-bin(生成文件夹目录)里面的东西都删除掉,然后在进行编译,否则编译还是会报错。
(2)还有一个报错”打开不了itkImage.h文件
如下所示
交流:1136958892