当前位置:首页 » 编程软件 » 编译cmake

编译cmake

发布时间: 2024-02-01 00:19:26

1. cmake怎么编译visual studio win32

点击"configure"按钮。选择要使用的集成开发环境(IDE)。Windows系统选择"Visual Stud

注释:
即使您不进行交叉编译,也必须规定一个工具链文件。

6
如果某些配置字段为红色,请再次点击"configure"按钮。所有字段都应该为灰色。
点击OK。
Windows系统下,在您的构建目录里会生成一个可打开的.sln文件。

7
编译范例项目。在Linux或Mac里,只需"cd"到构建目录,并键入"make"。

注释:
您可以随时重置项目。操作时,删除构建目录的内容并重新启动CMake。
请勿编辑Visual Studio Project,因为它是实时生成的(详情请参见Cmake的程序说明书)。可以通过编辑Cmake文件来进行配置。

2. cmake编译单/多文件

在该路径下会生成一个文件夹(CMakeFiles),三个文件(Makefile, CMakeCache.txt, cmake_install.cmake)以及一个程序(addition)

此时的文件目录结构为

该项目该依赖于MPI,GDAL和cereal库。MPI和GDAL库自行编译

1.配置各种编译的时候,可以使用set设置,更多详情,请自行搜索。
2.头文件的包含请使用include_directories。
3.搜索源文件请使用aux_source_directory。
4.第三方库的查找使用 find_package。例如我们想找GDAL, 那么 find_package(GDAL), 它会在 /usr/share/cmake/Moles 文件中的FindGDAL.cmake文件中去找GDAL的各种信息。前提是GDAL 是make install的, FindGDAL.cmake中才会有GDAL的各种信息。否则的话,我们需要set自行制定GDAL的相关信息。
5.第三方库的链接用target_link_libraries。
注意,也可以将该项目中的某个文件夹编译成静态库,然后在于其余源文件链接,可以参考: https://blog.csdn.net/cliukai/article/details/90670243

简单的多文件编译: https://blog.csdn.net/cliukai/article/details/90670243
有第三方库的文件编译: https://blog.csdn.net/fb_help/article/details/79593037

3. 如何使用CMake进行交叉编译

cmake交叉编译配置

很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。

CMake给交叉编译预留了一个很好的变量CMAKE_TOOLCHAIN_FILE,它定义了一个文件的路径,这个文件即toolChain,里面set了一系列你需要改变的变量和属性,包括C_COMPILER,CXX_COMPILER,如果用Qt的话需要更改QT_QMAKE_EXECUTABLE以及如果用BOOST的话需要更改的BOOST_ROOT(具体查看相关Findxxx.cmake里面指定的路径)。CMake为了不让用户每次交叉编译都要重新输入这些命令,因此它带来toolChain机制,简而言之就是一个cmake脚本,内嵌了你需要改变以及需要set的所有交叉环境的设置。

toolChain脚本中设置的几个重要变量

1.CMAKE_SYSTEM_NAME:

即你目标机target所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.

2. CMAKE_C_COMPILER:

顾名思义,即C语言编译器,这里可以将变量设置成完整路径或者文件名,设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,如果你写的文件名带有arm-elf等等前缀,CMake会识别到并且去寻找相关的交叉编译器。

3. CMAKE_CXX_COMPILER:

同上,此时代表的是C++编译器。

4. CMAKE_FIND_ROOT_PATH:

指定了一个或者多个优先于其他搜索路径的搜索路径。比如你设置了/opt/arm/,所有的Find_xxx.cmake都会优先根据这个路径下的/usr/lib,/lib等进行查找,然后才会去你自己的/usr/lib和/lib进行查找,如果你有一些库是不被包含在/opt/arm里面的,你也可以显示指定多个值给CMAKE_FIND_ROOT_PATH,比如

set(CMAKE_FIND_ROOT_PATH /opt/arm /opt/inst)

该变量能够有效地重新定位在给定位置下进行搜索的根路径。该变量默认为空。当使用交叉编译时,该变量十分有用:用该变量指向目标环境的根目录,然后CMake将会在那里查找。

5. CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:

对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER

6. CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:

对FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.

7. CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:

对FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY,如果你想改变,一般也是在相关的FIND命令中增加option来改变局部设置,有NO_CMAKE_FIND_ROOT_PATH,ONLY_CMAKE_FIND_ROOT_PATH,BOTH_CMAKE_FIND_ROOT_PATH

8. BOOST_ROOT:

对于需要boost库的用户来说,相关的boost库路径配置也需要设置,因此这里的路径即ARM下的boost路径,里面有include和lib。

9. QT_QMAKE_EXECUTABLE:

对于Qt用户来说,需要更改相关的qmake命令切换成嵌入式版本,因此这里需要指定成相应的qmake路径(指定到qmake本身)

toolChain demo

# this is required
SET(CMAKE_SYSTEM_NAME Linux)

# specify the cross compiler
SET(CMAKE_C_COMPILER /opt/arm/usr/bin/ppc_74xx-gcc)
SET(CMAKE_CXX_COMPILER /opt/arm/usr/bin/ppc_74xx-g++)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /opt/arm/ppc_74xx /home/rickk/arm_inst)

# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# configure Boost and Qt
SET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)
SET(BOOST_ROOT /opt/boost_arm)

这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。

4. 怎么用CMake编译freeglut

1、解开freeglut-3.0.0的压缩包,用记事本打开目录树下的“README.cmake”文件,下载Binary distributions。

2、下载好,解开其压缩包后,找到可执行文件,cmake-3.2.2-win32-x86/bin/cmake-gui.exe,运行之,

3、在两个where后边填上目录树的路径(注意不是src的路径,本文以R:/freeglut-3.0.0为例),点击configure按钮,弹出如下的对话框,从中选择所需的开发环境:

4、这里支持的环境好多,选择需要的环境,然后点击Finish,它会开始检查这个环境,然后给出一些配置选项:

5、从中修改静态库目标的安装位置(本例安装在R:/freeglut_static),勾掉不需要的选项(比如Demo、动态连接库等),点击Generate,即可生成工程。
6、打开工程后,找到工程设置,在此可以按照自己的需要修改一些配置,实际上绝大多数都不必动,有可能需要修改的也就是这么个地方:

7、这个按照自己的需要选择单线程运行库或是多线程运行库,或是多线程的DLL版运行库,主要是为了防止和别的库或者别的工程的设置冲突。
然后批量编译:

8、勾掉不必要的选项,比如MinSizeRel是在Release版本的基础上,改成最小尺寸优化的版本;RelWithDebInfo是在Release版本的基础上,添加调试信息的版本。这俩版本的可以不要。然后,点击Rebuild All,编译完就可以在安装目录下找到最终文件了。

5. Cmake动态编译VTK库(QVtkwidget)

在版本问题上大费周章之后,得到如下的成功尝试

软件版本说明:

PCl1.8.1 + VS2017 + Qt5.9.6 + Cmake + Vtk8.0.0

点击Configure后对条目进行处理:(修改完成继续Configure直到没有错误)

1.点击Add Entry添加 

    Name:    CMAKE_DEBUG_POSTFIX 、Type:    STRING 、Value:-gd、Description:空

让vtk的lib最后分为debug版本跟release版本。Debug版本带-gd。Release版本不带-gd,方便区分.

2.勾选BUILD_SHARED_LIBS,这样最后生成的vtk才会有dll跟lib

3.CMAKE_INSTALL_PREFIX设置为你清空的VTK文件夹(为了方便,这里选择的路径为PCL集成的VTK路径)

4.勾选VTK_Group_Qt,这样以后方便在qt里面使用

5.修改Qt5_DIR路径为PATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/lib/cmake/Qt5

6.修改VTK_QT_VERSION:STRING=5,使用Qt5修改相应版本号

7.如出现qmake路径则修改QT_QMAKE_EXECUTABLE:FILEPATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/bin/qmake.exe

完成Configure,不出意外就不再显示红色,接着点Generate

接着以管理员身份运行VS2017,打开构建目录下的VTK.sln

选择Debug,x64,然后右键解决方案窗口的ALL_BUILD --> 生成。

 漫长等待...ing

然后右键install --> 仅生成install

Release版本同理,先ALL_BUILD --> 生成 再 右键install --> 仅生成install

至此完成编译VTK操作,接下来提取所需的QVtkwidget插件

6. 如何在Windows下通过Cmake编译和使用PCRE

CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。
如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。
总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。

准备活动:
(1)安装cmake。
下载地址:
根据自己的需要下载相应的包即可,Windows下可以下载zip压缩的绿色版本,还可以下载源代码。
Windows下CMake的使用
(2)运行cmake的方法。(GUI、命令行)

CMake使用步骤:
运行GUI的cmake界面:
cmake-2.8.1-win32-x86\bin\cmake-gui.exe
Windows下CMake的使用
执行Configure:
运行之后,生成了如下文件:
Windows下CMake的使用
生成Makefile:
执行Generate之后生成如下文件:
Windows下CMake的使用
运行make进行编译:
Windows下CMake的使用
编译完成后,在build目录生成Tutorial.exe,运行Tutorial.exe 25就可以看到运行结果:
Windows下CMake的使用
运行make install安装程序:
Windows下CMake的使用
运行make test进行测试:
Windows下CMake的使用

通过cmake tutorial学习CMake配置方法

可以在源代码的Tests/Turorial目录中找到这个手册对应的代码。
Windows下CMake的使用
1、Step1。
(如果不知道如何使用cmake,以及如何使用编译产生的Turorial.exe,可先看下前面“CMake使用步骤”的说明,它以Step4为例详细介绍了使用过程,Step1的配置可能不够完全,比如无法运行make install,无法运行make test,但可以参考。)
简单的程序编译。
(1)运行GUI的cmake,指定要编译的源代码路径和二进制文件路径(会自动创建)。
Windows下CMake的使用
(2)点击Configure,配置成功后,再点击Generate。
配置需要选择合适的编译器,虽然我安装了VC2008,但没有配置成功;选择Unix Makefiles,配置成功,它自动找到了DevC++下的gcc.exe等编译器。
Windows下CMake的使用
(3)在build3目录执行make,就能够编译生成Turorial.exe了。
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make
Linking CXX executable Tutorial.exe
[100%] Built target Tutorial
可以运行一下Turorial.exe:
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe
Tutorial.exe Version 1.0
Usage: Tutorial.exe number
D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4
The square root of 4 is 2
2、Step2
把子目录编译为库,并且链接到最终的可执行文件。
include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")
add_subdirectory (MathFunctions) # 使得子目录MathFunctions也能被编译

# add the executable
add_executable (Tutorial tutorial.cxx)
target_link_libraries (Tutorial MathFunctions)
产生makefile:
在GUI上点击Configure,之后Generate还是灰色,再次点击Configure,Generate就可以点击了。
编译:

7. cmake中修改默认编译器的两个问题

在为交叉编译工程写cmake脚本时,可以在脚本里修改默认编译器的值。这种方法会碰到下面两个问题

例如,下面是一个经过简化后的CMakeLists.txt:

cmake+make的输出如下:

可以看到,set(CMAKE_CXX_COMPILER "/usr/bin/g++-4.8")命令之后,默认编译器已经由g++-5.5修改为了g++-4.8,且编译阶段确实也使用的是g++-4.8。但是此时CMAKE_CXX_COMPILER_VERSION的值仍然是5.5。

例如,顶层CMakeLists.txt中的内容如下:

子目录sub/CMakeLists.txt中只有一行:

cmake就会陷入死循环:

问题1:

问题2:

但是有个更简单的方法,可以解决以上所有问题:
在第一个project命令前,修改默认编译器的定义。
例如:

热点内容
用什么引擎导出的安卓安装包不大 发布:2024-11-16 09:09:06 浏览:473
安卓手机如何设置转接 发布:2024-11-16 09:08:55 浏览:422
sql行业 发布:2024-11-16 09:04:07 浏览:295
如何查看电脑硬盘的接口速率缓存 发布:2024-11-16 08:59:42 浏览:220
c语言局部变量与全局变量 发布:2024-11-16 08:37:38 浏览:489
安卓苹果是什么意思啊 发布:2024-11-16 08:36:03 浏览:871
泛型方法编译 发布:2024-11-16 08:36:01 浏览:875
造梦西游记的密码和用户名是什么 发布:2024-11-16 08:30:22 浏览:338
cmake编译zlib出错 发布:2024-11-16 08:26:32 浏览:442
realmegt大师探索版买哪个配置 发布:2024-11-16 08:25:49 浏览:150