- 九万里风9
-
minggw(gcc)编译出来的动态库(DLL),默认是没有MSVC连接动态库所需要的lib文件的。
关于MSVC的DLL和LIB的作用和区别,请参考这篇博文,讲得很透彻了–>《DLL和LIB的区别》
那么如果VC要链接gcc生成的DLL,却没有lib文件怎么办?
对于这个问题网上都有解决的办法,这篇文章讲到一些办法,可供收藏《VC6 调用GCC的DLL》,对于没有提供lib的DLL都可以用这篇文章提供的办法试试。
如果项目中不同的模块用不同的编译器编译,这时如果gcc编译的DLL没有import library(lib文件),可以通过cmake设置选项来解决。
CMAKE有一个GNUtoMS参数就是解决这个问题的。
GNUtoMS
Convert GNU import library (.dll.a) to MS format (.lib).
When linking a shared library or executable that exports symbols using GNU tools on Windows (MinGW/MSYS) with Visual Studio installed convert the import library (.dll.a) from GNU to MS format (.lib). Both import libraries will be installed by install(TARGETS) and exported by install(EXPORT) and export() to be linked by applications with either GNU- or MS-compatible tools.
CMAKE_GNUtoMS
Convert GNU import libraries (.dll.a) to MS format (.lib).
This variable is used to initialize the GNUtoMS property on targets when they are created. See that target property for additional information.(这个变量用来初始化GNUtoMS属性)
在用cmake生成Makefile时,设置GNUtoMS就可以解决这个问题。有两种途径:
shell命令行方式
如下在命令行中-D定义一个为bool类型的CMAKE_GNUtoMS参数为ON,就指示在编译时对dll生成.lib的import library
cmake %source_folder% -G “Eclipse CDT4 - MinGW Makefiles” -DCMAKE_GNUtoMS:BOOL=ON
cmak-gui
如下在cmake-gui界面中将CMAKE_GNUtoMS选项勾选,再点<generate>按钮生成Makefile
这里写图片描述
然后执行make编译项目的过程中,生成dll时会输出(前提是你安装了VC编译器)
Setting environment for using Microsoft Visual Studio 2010 x64 tools.
Microsoft (R) Library Manager Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
正在创建库 libturbojpeg.lib 和对象 libturbojpeg.exp
编译完成后,你就会发现所有的dll都有对应的lib文件了。
link: http://www.voidcn.com/article/p-tlmilzjf-ca.html
[原创] Cmake实战指南
我觉的Cmake比较核心的一些东西就是 比如我当前项目源码根目录下面有这些源码目录 我会在根目录放置一个 CMakeLists.txt,之后在每个需要管理的目录下面也放置一个CMakeLists.txt,如下所示(这边没有把include包含进来是因为头文件cmake会自动去构建不需要手动添加,拿C语言来举例,所有包含在.C中的.H文件,cmake全部会帮你自动计算出来,不需要手动去添加) 需要说明下这边我多加了两个目录cmake和build,cmake目录一般用来放置一些通用的cmake源码模块(比如通用编译环境设置,编译链接的一些选项配置等等),build用来存放项目构建过程中所有的输出文件。 根目录下面CMakeLists.txt大致就可以按下面这样撰写,就可以把整个骨架搭起来。 进入build目录运行整个编译框架 备注:也可以用其他方式来设置编译链接的一些参数,比如直接设置cmake内置变量或者其他命令,我这里选择这些基于目标的命令来操作主要是因为,基于目标来管理更容易维护和管理,不会污染到其他的作用域。 具体的含义如下: CMakeCInformation.cmake里面的编译器/链接器/归档器的变量定义如下 [1] https://cmake.org/cmake/help/v3.10/#2023-06-09 10:05:101
cmake 怎么使用message打印变量的值
我觉得大致思路是 1. 先用左右边界就像你写的那样子去匹配服务器的返回值 2. 然后把这个返回值写到一个变量 (貌似这一步你代码里没体现) 3. 最后把这个变量打印到日志 (这里似乎不需要使用参数化 参数化不应该是这么用的 )2023-06-09 10:05:181
unbuntu中安装cmake后怎么修改环境变量
看视频啊2023-06-09 10:05:252
Cmake命令之find_library介绍
u2003u2003该命令用于查找库(动态库或者静态库),当构建依赖于第三方库/系统库,可以使用该命令来查找并使用库(Cmake中有另外一个命令 find_package ,能获取库的更多信息,具体可以参考 Cmake命令之find_package介绍 ) u2003u2003通过一个例子来看下基本的使用,假设我们目录和文件树如下,: u2003u2003我们在 mylib 中生成最终的库 libmymath.a ,然后在顶层的 CMakeLists.txt 中查找这个库文件,几个文件的具体内容如下: u2003u2003在 ./mylib/ 下执行 cmake . 和 make 以便生成库 libmymath.a ,然后在 ./ 目录下执行 cmake . 和 make ,得到可执行文件 test ,运行 test 的结果为: u2003u2003库的搜索路径分为两大类: 默认搜索路径 和 附加搜索路径 。 u2003u2003 默认搜索 路径包含 cmake 定义的以 CMAKE 开头的一些变量(例如 CMAKE_LIBRARY_ARCHITECTURE 、 CMAKE_PREFIX_PATH 、 CMAKE_LIBRARY_PATH 、 CMAKE_FRAMEWORK_PATH )、标准的系统环境变量(例如系统环境变量 LIB 和 PATH 定义的路径)、系统的默认的库安装路径(例如 /usr 、 /usr/lib 等); u2003u2003 附加搜索路径 即 find_library 命令中通过 HINTS 或 PATHS 指定的路径; u20031) 通过命令行使用 -D 指定的 CMAKE_XXX_PATH 变量,也就是形如 cmake . -DCMAKE_XXX_PATH=paths 的格式。其中 CMAKE_XXX_PATH 包含如下几个: u2003u2003 CMAKE_PREFIX_PATH :指定搜索目录的前缀,如果前缀有多个,需要以 分号分割的列表 方式提供,该变量默认为空,一旦该变量非空,那么会搜索该变量提供的目录,以及 ${CMAKE_PREFIX_PATH}/lib ;例如 CMAKE_PREFIX_PATH=A;B ,那么 find_library 会从 A 、 B 以及 A/lib 、 B/lib 中搜索库是否存在; u2003u2003 CMAKE_LIBRARY_ARCHITECTURE :如果该变量被设置,那么会搜索目录 ${CMAKE_PREFIX_PATH}/lib/${CMAKE_LIBRARY_ARCHITECTURE} ; u2003u2003 CMAKE_LIBRARY_PATH :指定 find_library 的库查找目录,默认值为空,多个值时需要以分号分割列表指定; u2003u2003 CMAKE_FRAMEWORK_PATH *:指定 macOS 的框架作为搜索路径。 u20032) 通过在 环境变量 中指定 CMAKE_XXX_PATH 变量,例如在 window 的环境变量中增加 CMAKE_XXX_PATH (以 ; 分割多个路径)、 Linux 中 shell 配置文件中添加(以 : 分割多个路径)。用法和 cmake -D 指定类似,例如在我的机器中( macOS ),在 .zshrc (我的命令行配置文件)中增加 export CMAKE_LIBRARY_PATH="/XXX/……/mylib" ,即可在将该目录加入到搜索路径中。 u20033) HINTS 选项指定的路径。 u20034) 系统环境变量指定的目录,默认是 LIB 和 PATH 指定的路径。例如在 PATH 中指定库搜索目录; u2003也可以通过 find_library 中的 PATHS ENV 环境变量名称 ( cmake 中使用环境变量名称的格式为 $ENV{环境变量名称} )来指定从哪个环境变量名称中获取路径,例如定义一个 TESTPATH 环境变量并赋值为 ./mylib ,并在 find_library 命令中指定使用该环境变量: u20035)跟当前系统相关的平台文件路径,一般来说指的是当前系统安装软件的标准目录,不同的操作系统对应的路径有所不同。 camke 中 find_library 与此相关的也有如下几个, CMAKE_SYSTEM_XXX_PATH 变量,这些: u2003u2003 CMAKE_SYSTEM_PREFIX_PATH :指定安装目录的前缀,例如在 Windows 下的 /XXXX/Program Files , Linux 下的 /usr 或 /usr/local 等。 find_library 命令会搜索这些前缀目录,也会以这些目录加上 lib 进行搜索,例如搜索 /usr/local/lib ; u2003u2003 CMAKE_SYSTEM_LIBRARY_PATH :默认是当前系统的标准目录,不建议修改它;例如在我的系统,这个变量的值是 /usr/lib/X11 ; u2003u2003 CMAKE_SYSTEM_FRAMEWORK_PATH : macOS 框架路径,默认是当前系统的标准目录,不建议修改它;例如在我的系统,这个变量的值包含了路径 /Library/Frameworks ; u20036) PATHS 选项指定的路径。 u20032023-06-09 10:05:331
Cmake “cmake_make_program is not set” 问题。
你好 我想问一下 我的cmake 在配置qt 和opencv的时候没有出来CMAKE_MAKE_PROGRAM这一项怎么办啊2023-06-09 10:05:443
如何使用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 requiredSET(CMAKE_SYSTEM_NAME Linux)# specify the cross compilerSET(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 directoriesSET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)# configure Boost and QtSET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)SET(BOOST_ROOT /opt/boost_arm)这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。2023-06-09 10:06:011
Cmake笔记之set_target_properties
第一篇文章,记一个困扰了我很长时间的一个cmake的问题吧。 大家在用cmake时,应该经常会用到第三方so库,导入第三方so库中需要使用到set_target_properties,例如这样写: set_target_properties( Thirdlib PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/jniLibs/libThirdlib.so ) CMAKE_CURRENT_SOURCE_DIR 这个变量是系统自定义的,表示CMakeLists.txt文件的绝对路径注意CMakeLists.txt文件的路径,我的这个文件是放在app/src/main 下。2023-06-09 10:06:111
cmake复制文件
遇到一个需求,需要项目中的子工程与主工程在编译上隔离,也就是说无法使用: 来使得子工程产生的库文件集中到统一的目录,并使用。 将子工程看做独立的工程,将生成的库文件作为接口提供给调用它的主工程。 在子工程的cmake文件设置选项,选项 MATCHES 时直接 RETURN() 。 这里主工程会报一个 The dependency target "sub_project" of target "project" does not exist. 的错误。 这里加一个自定义的伪 target 就可以。 然后就遇到了第一个问题,cmake内置了 install 的安装路径,默认在 linux 下是 /usr/local 。 × 以上命令,当 INCLUDE_OUTPUT_PATH 为相对路径时会在最终 install 时产生 /usr/local/INCLUDE_OUTPUT_PATH 的路径,而非预期的相对路径。 √× 由于项目的绝对路径本身是不确定的,再次尝试直接使用cmake内置变量 CMAKE_CURRENT_SOURCE_DIR ,以 CMAKE_CURRENT_SOURCE_DIR/../../include/ 构建路径。 这个由内置变量构成的绝对路径在 cmake 时能够正确打印,并运行。 这时又出现一个问题,主项目在编译时期就需要子项目的库文件,但子项目的库文件在 install 时才安装到指定路径下,就无法将是否编译子项目作为可选项加入cmake。 × 查阅文档发现,这个默认路径在cmake中有变量 CMAKE_INSTALL_PREFIX 控制。 再次试图 set 变量 CMAKE_INSTALL_PREFIX ,发现并没有生效。 查阅资料发现可以使用以下命令,强制其生效。 然而,这个变量的影响是全局的,它会导致主工程的 install 都被定位到当前目录,得不偿失。2023-06-09 10:06:191
linux 源码安装 cmake 时 可选的参数有哪些
./configure ----prefix=/cmake你都用 --prefix ,而且还是指定到自定义目录的方式了。还来 XXOO 的说这个指定目录才能运行的问题……哎……1、make uninstall ,不过不是所有的都支持2、export PATH=/cmake/bin:$PATH3、我记得 bootstrap 是某个项目管理程序的控制脚本,用来生成编译环境的。configure 好像就归他生成,但一般软件项目发布后都会生成好足够用的环境,所以不一定需要这个东西。关于 cmake ,我想说你的系统难道就没有只能用的 make 吗?2023-06-09 10:06:323
cmake交叉编译参数toolchain
CMake给交叉编译预留了一个很好的变量即 CMAKE_TOOLCHAIN_FILE ,它定义了一个文件的路径,这个文件即toolChain,里面set了一系列你需要改变的变量和属性,包括 C_COMPILER , CXX_COMPILER 。CMake为了不让用户每次交叉编译都要重新输入这些命令,因此它带来toolChain机制,简而言之就是一个cmake脚本,内嵌了你需要改变以及需要set的所有交叉环境的设置。 这里面也牵扯了一些相关的变量设置,在这里我通过自己的项目,简单介绍下几个比较重要的: 添加链接参数 买火车票、高铁票、机票,订酒店都打9折的出行工具TRIP, 点击注册2023-06-09 10:06:411
CMAKE_GNUtoMS:将GNU格式库转换为MSVC格式
在Windows上使用MinGW(GCC)编译器时,可以定义 CMAKE_GNUtoMS 变量,自动将GCC格式库 .dll.a 转换为微软编译器支持的 .lib 格式。 测试环境 :开发环境CLion + MinGW64和VS2019。 在 CMakeLists.txt 中添加 CMAKE_GNUtoMS_VCVARS 和 CMAKE_GNUtoMS 即可,使用时需要注意它们的位置和顺序。其中CMAKE_GNUtoMS_VCVARS用于设置MSVC工具链,完整CMakeLists.txt文件如下: 我这儿编译的是64位的库,所以使用 vcvars64.bat ,如果是32位,就是 vcvars32.bat 。 编译时输出如下: 然后把 libdemo.lib 、 libdemo.dll 和头文件拷贝到MSVC编译环境中运行即可,注意MSVC编译目标也要设置为64位。 CLion工程 ,编译器为MinGW64。 VS2019工程 把 libdemo.lib 、 libdemo.dll 和 library.h 拷贝到工程目录中,然后编译即可。2023-06-09 10:07:031
萌新求助,在环境变量中已经配置好cmake和mingw64,为什么cmd还是没反应?
上面那个cmake路径设置已经没问题,是参数错误,提示你用cmake --help查看帮助。下面那个看来是路径设置没有成功,你可以在cmd提示符下输入path回车看看路径设置是否成功。2023-06-09 10:07:161
本人第一天用ubuntu,使用终端cmake装程序出现错误,说变量没有发现
configure: error: guile required but not found用这个命令来安装guileapt-get install guile2023-06-09 10:07:251
Linux下使用CMake进行编译的时候寻找Boost库
通过调用 find_package 可以找到头文件和所需要的库文件或者是一个CMake打包配置文件, 运行完后可以得到很多变量,下面列了一些主要的 可以在搜索package之前,通过设置一些变量来帮助boost库的查找 假如目标程序foo需要链接Boost库regex和system,编写如下的CMakeLists文件, FindBoost2023-06-09 10:07:371
如何才能使CMake生成的可执行程序便于调试
出现的原因是导入的此makefile工程不是debug模式的,所以不包含调试信息,自然不能打断点调试了。因此,要解决这个问题就要考虑如何修改CMakeLists.txt使其生成的makefile文件进而生成Debug模式下的带调试信息的可执行程序;我们先写一个简单的测试例子来测试一下,如何加调试信息:假设文件结构如下:./test6 | + ------ CmakeLists.txt + ------ main.cpp + ------ src_a | + ------ CmakeLists.txt + ------ Testa.h + ------ Testa.cpp + ------ src_so | + ------ CmakeLists.txt + ------ Testso.h + ------ Testso.cpp第一步:test6目录下CmakeLists.txtcmake_minimum_required(VERSION 3.3)project(main )add_subdirectory(src_a ) // 给当前工程目录添加子目录 src_aadd_subdirectory(src_so ) // 给当前工程目录添加子目录 src_soset(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息set(EXECUTABLE_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置可执行文件的生成路径include_directories($ {PROJECT_SOURCE_DIR}/src_a ${PROJECT_SOURCE_DIR}/src_so) //包含库头文件aux_source_directory(. DIR_SRCS ) // 将当前目录中的源文件名称赋值给变量 DIR_SRCSadd_executable(main $ {DIR_SRCS}) //表示 DIR_SRCS中的源文件需要编译成名为 main的可执行文件target_link_libraries (main Testa Testso) //将库文件链接到生成的目标可执行文件第二步:子目录目录下CmakeLists.txt 1,src_a中静态库的编译生成cmake_minimum_required(VERSION 3.3) //该命令限定了 CMake 的版本set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置Lib 静态库生成路径aux_source_directory(. LIBA_SRC) //将当前目录中的源文件名称赋值给变量 LIBA_SRCadd_library(Testad STATIC $ {LIBA_SRC}) //将变量 LIBA_SRC中的源文件编译为静态库,库文件名称为 Testa2,src_so中动态库的编译生成cmake_minimum_required(VERSION 3.3) //该命令限定了 CMake 的版本set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置Lib 动态库库生成路径aux_source_directory(. LIBSO_SRC) //将当前目录中的源文件名称赋值给变量 LIBA_SRCadd_library(Testsod SHARED $ {LIBSO_SRC}) //将变量 LIBA_SRC中的源文件编译为动态库,库文件名称为 Testso此处执行cmake时有两种方式:1,在cmake的gui界面中设定生成Debug模式,2,在执行cmake时使用如下命令:cmake -DCMAKE_BUILD_TYPE=Debug/Release path关于ccmake的使用,这里简单的做个说明:1.首先在终端启动cmake的gui界面:"ccmake ." 效果如图:2.然后在gui中输入"c",效果如图:3.然后在gui中输入"e",效果如图:4.此时在gui界面点击"enter"回车键进行编辑:编辑完再次点击回车退出编辑。5.点击"c",之后再次点击"g"。此时makefile文件已经生成好了。make之后生成的可执行文件是带有调试信息的,就可用gdb进行调试了(导入Eclipse也可以进行打断点调试)。2023-06-09 10:07:591
项目构建工具CMake、GYP、GN
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 2、cmd或powershell下键入 cmake查看,是否安装已加入到环境变量路径,若否,需手动设置 3、cd 到工程目录下有CMakeLists.txt的目录下 4、cmake . 开始构建vs解决方案,生成 xxx.sln 5、vs打开即可GYP (Generate Your Projects)是由 Chromium 团队开发的跨平台自动化项目构建工具,Chromium 便是通过 GYP 进行项目构建管理。为什么要选择 GYP,而放弃 CMake 呢?功能上 GYP 和 CMake 很是相似,在我看来,它们的最大区别在于配置文件的编写方式和其中蕴含的思想。编写 CMake 配置文件相比 Autotools 来说已经简化很多,一个最简单的配置文件只需要写上源文件及生成类型(可执行文件、静态库、动态库等)即可。对分支语句和循环语句的支持也使得 CMake 更加灵活。但是,CMake 最大的问题也是在这个配置文件,编写 CMake 配置文件是一种线性思维,对于同一个目标的配置可能会零散分布在各个地方。而 GYP 则相当不同,GYP 的配置文件更多地强调模块化、结构化。 所以说GYP代替CMake也是有其原因的。 GN比GYP速度快20倍,而且简单,所以谷歌就把GYP标注为过期,相关项目都迁到GN上来2023-06-09 10:08:301
cmake安装方法
方法/步骤1打开Web浏览器,然后进入百度并搜索“cmake”。在返回的搜索列表中找到“CMake的官网”并将其打开;打开CMake官网之后,点击导航栏中的“Download”链接进入下载页面;CMake安装教程[TZZ]在“下载页面”的二进制分发版本中,找到与你的系统匹配的安装包程序并点击下载;最新版的CMake安装包下载完毕后,双击启动它开始安装。在弹出的“CMake欢迎界面”中,点击“Next按钮”进入下一步;在出现的“终端用户许可证界面”中,勾选“接受许可证…”,然后点击“Next按钮”进入下一步;在出现的“安装选项界面”中,选择“将CMake添加到所有用户的系统PATH变量中”,然后勾选“创建CMake桌面图标”并点击“Next按钮”进入下一步;在出现的“安装目录界面”中,可以点击“Change按钮”选择CMake的安装位置。设置完毕后,点击“Next按钮”进入下一步;在出现的“准备安装CMake界面”中,点击“Install按钮”开始安装。安装开始后,耐心等待它完成安装;在出现的“完成CMake安装向导界面”中,点击“Finish按钮”完成安装;CMake安装完毕后,双击桌面上的“CMake图标”将其打开。通过CMake GUI界面可以设置CMake项目的配置和生成任务;CMake安装就介绍到这里了。之后编译CMake项目的文章中将会涉及CMake的使用,敬请期待!2023-06-09 10:08:491
win7 64位 执行 cmake minglingh
在系统变量的 path 项目里加入cmake的路径 试试看2023-06-09 10:08:562
如何写CMakeList.txt
1Cmake 有linux ,windows 多个平台版本,如图是windows下版本程序2更具一个简单多目录c项目,学下cmakelist.txt编写规范3根目录下cmakelist文件内容:set(CMAKE_INSTALL_PREFIX):设置程序的安装目录,优先级比cmake命令参数设置高。add_subdirectory(编译文件子目录)4libhello 目录下的cmakelist文件内容:5libhello 目录下的cmakelist文件内容:2023-06-09 10:09:042
centOS 6.6 中安装cmake时出现无C++程序可关联
上百度啊哈2023-06-09 10:09:135
Android studio 运行fcitx5-android 出错问题?
从您提供的错误信息来看,问题出在CMake找不到名为“FindECM.cmake”的文件。ECM(Extra CMake Modules)是一个用于简化CMake构建系统的工具集,提供了许多额外的CMake模块和功能。您需要安装ECM以解决这个问题。在Debian/Ubuntu系统中,您可以使用以下命令来安装ECM:sudo apt-get install extra-cmake-modules如果您已经安装了ECM但仍然遇到这个问题,请尝试将ECM的安装路径添加到CMAKE_PREFIX_PATH环境变量中。您可以在CMakeLists.txt中添加以下代码:list(APPEND CMAKE_PREFIX_PATH /path/to/ECM)将/path/to/ECM替换为实际的ECM安装路径。您也可以尝试将ECM的路径添加到CMAKE_MODULE_PATH变量中:list(APPEND CMAKE_MODULE_PATH /path/to/ECM/cmake)其中/path/to/ECM是实际的ECM安装路径。如果问题仍然存在,请检查ECM是否已正确安装,以及CMake是否支持您的项目所需的ECM版本。在有些情况下,您可能需要从源代码编译和安装较新版本的ECM。2023-06-09 10:09:293
CMake出错,应该怎么办?
同问,我也总是出现这个问题!怎么解决的2023-06-09 10:09:376
opencv2.1.0在linux下怎么安装
pkg-config 是一个库文件安装信息管理工具,它可以返回已安装的库文件及其相关头文件的位置信息。安装这个极容易,自己下载安装把。pkg-config 通过各个库文件的.pc 文件识别已安装的库文件的信息,这些.pc文件是由各库的安装程序自己生成的,例如ffmpeg 安装程序会在/usr/local/lib/pkgconfig目录下提供libavcodec.pc libswscale.pc 等5个.pc文件,分别对应安装的五个库文件。但pkg-confg默认只搜索/usr/lib/pkgconfig目录,去寻找.pc文件,这里需要添加一个环境变量 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig,使得pkg-config可以找到ffmpeg的安装信息。三 安装cmakecmake 是一个跨平台makefile生成工具,是编译新版opencv所必须的工具。直接下载安装cmake到一个合适的位置,并将cmake安装目录下的bin目录加入PATH环境变量,cmake的使用详见下述说明。四 安装opencv1、下载最新版opencv源代码 for linux.2、在源代码目录下 mkdir release && cd release 3、cmake ../ (重点)使用cmake 生成编译opecv的Makefile 文件, ../ 是opencv的源代码目录,里面包含了预置的cmake 配置文件CmakeLists.txt。这里的输出,会显示默认配置下,各模块的检测情况,重点是opencv所需工具库是否被检测到,例如视频编解码库、TBB库等。查看CmakeLists.txt文件可知,cmake使用pkg-config获取所需的库文件的信息,这就是为什么一定要安装pkg-config的原因。如果你看到FFMPEG及其下各子项的值为1,ok,检测到了,如果为0,核对1、2两步骤,看是否成功安装了ffmpeg,以及pkg-config是否可以检测到ffmpeg:使用 pkg-config –list-all | grep libavcodec 。4、 cmkae-gui ../若你想改变opencv的默认编译模式,用cmake的图形模式可以编辑一大堆的编译参数,例如是否支持IPP、TBB等等,这里比较讨厌的是,图形模式下,你看不到选择的模块是否被正确检测到,要再运行 cmake ../ 查看。5、 make && make install 默认 opencv将被安装在 /usr/local/ 下。6、 编辑环境变量 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib 以使得系统可以找到opencv的动态链接库。到这里,opencv安装完毕,并可读写几乎全部常见视频文件,你可以使用g++直接编译你的例程,如果你的pkg-config配置正确,以下指令可以运行 :g++ -o my_example my_example.cpp `pkg-config opencv --cflags --libs`pkg-config opencv --cflags –libs 将返回opencv的头文件和库文件的编译参数。2023-06-09 10:09:511
cmake编译opencv总是出错 求助啊
是你的编译器版本不对, You probably need to select a different build tool.在点击configure时,会出来一个选择编译器的框,你选一个你机器里有的编译器就可以了。2023-06-09 10:09:583
怎么使用CMake链接不同版本的第三方库
其实没有必要再写批处理来做这件事。CMake中有CMAKE_CONFIGURATION_TYPE这个环境变量,其中的值就是Debug, Release, RelWithDebInfo, MinSizeRel这几个。只要使用if语句判断一下,在指定的版本使用指定的第三方库版本就可以了。可以参考OpenCV的CMakeLists2023-06-09 10:10:071
编译安装mysql56时出现bash:cmake:command not found怎么解决
看看安装没有rpm -qa | grep cmake没有的话安装一下 yum install -y cmake2023-06-09 10:10:202
CMAKE_RC_COMPILER 是什么东西
cmake vs qmakeqmake 是为 Qt 量身打造的,使用起来非常方便cmake 使用上不如qmake简单直接,但复杂换来的是强大的功能内置的 out-of source 构建。(目前QtCreator为qmake也默认启用了该功能,称:shadow build)为各种平台和场景提供条件编译可处理多个可执行文件情况,和很好配合 QtTest 工作如何选择?Using CMake to Build Qt Projects 一文中说:对简单的Qt工程,采用 qmake对复杂度超过 qmake 处理能力的,采用 cmake尽管如此,如果简单Qt的工程都不知道怎么用 cmake 构建,复杂的工程,就更不知道如何使用 cmake 了。还是从简单的学起吧简单的 Qt 程序#include <QtCore/QCoreApplication>#include <QtCore/QDebug>int main(int argc, char** argv){ QCoreApplication app(argc, argv); qDebug()<<"hello qt!"; app.exec();}如果不使用构建工具,直接调用编译器来编译的话,只需要类似这样的一条命令:g++ main.cpp -Ie:Qt4.7.0include -o main -Le:Qt4.7.0lib -lQtCore4指定头文件目录,以及需要链接的库qmakeqmake 需要一个 .pro 文件:CONFIG += qtQT -= guiSOURCES += main.cpp因为我们需要 Qt的库和头文件,所以需要 CONFIG += qt 。这是默认项,可直接去掉该行启用qt后,可以通过 QT -= gui 来进一步细调我们需要的模块默认是 core gui。我们不需要gui模块,故去掉。cmakecmake 需要一个 CMakeLists.txt 文件:PROJECT(example)FIND_PACKAGE(Qt4 REQUIRED)SET(QT_DONT_USE_QTGUI TRUE)INCLUDE(${QT_USE_FILE})ADD_EXECUTABLE(example main.cpp)TARGET_LINK_LIBRARIES(example ${QT_LIBRARIES})FIND_PACKAGE 来启用 Qt4默认使用了core 和 gui,故手动禁用 QTGUI这两行可以直接使用 FIND_PACKAGE(Qt4 COMPONENTS QtCore REQUIRED),未指定的模块将被禁用包含一个CMake为Qt提供的配置文件,${QT_USE_FILE}变量是一个文件名添加可执行程序目标链接到 Qt 的库复杂一点考虑一个常规Qt程序:main.cppmainwindows.uimainwindows.hmainwindows.cpp如果手动编译的话:mainwindow.ui 需要使用 uic 预处理uic mainwindow.ui -o ui_mainwindow.hmainwindow.h 需要 moc 预处理moc mainwindow.h -o moc_mainwindow.cpp调用编译器进行编译g++ main.cpp mainwindow.cpp moc_mainwindow.cpp -Ie:Qt4.7.0include -o main -Le:Qt4.7.0lib -lQtCore4 -lQtGui4qmake使用 qmake 的的话,一个简单的 pro 文件TARGET = exampleTEMPLATE = appSOURCES += main.cpp mainwindow.cppHEADERS += mainwindow.hFORMS += mainwindow.uiHEADERS 中的文件是否需要 moc 进行预处理,qmake 运行时会根据其是否含有Q_OBJECT自动判断。这也是为什么 很多人添加Q_OBJECT宏后不重新运行qmake会出错误的原因。cmake看看相应的 cmake 的 CMakeLists.txt 文件PROJECT(example)CMAKE_MINIMUM_REQUIRED(VERSION 2.6)FIND_PACKAGE(Qt4 REQUIRED)INCLUDE(${QT_USE_FILE})INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})QT4_WRAP_CPP(example_MOCS mainwindow.h)QT4_WRAP_UI(example_UIS mainwindow.ui)ADD_EXECUTABLE(example main.cpp mainwindow.cpp ${example_MOCS})TARGET_LINK_LIBRARIES(example ${QT_LIBRARIES})需要 moc 的文件,用 QT4_WRAP_CPP 处理生成的文件放入变量 example_MOCS 中,最后一块链接到可执行程序需要 uic 的文件,用 QT4_WRAP_UI 处理Windows因为windows下链接时分为 console 和 windows 两个子系统,所以windows下有些问题需要特殊处理。用 qmake 时:默认是 windows 子系统可以通过 CONFIG += console 使用 console 子系统用 cmake 是:默认是 console 子系统使用 windows 子系统需要SET(QT_USE_QTMAIN TRUE)ADD_EXECUTABLE(example WIN32 main.cpp mainwindow.cpp ${example_MOCS})前者启用 qtmain.lib 库来提供windows下的 WinMain 入口函数。后者链接 windows 子系统再复杂一点main.cppmainwindows.uimainwindows.hmainwindows.cppmain.qrcmain.rc前面已经用到了Qt的 moc 和 uic,这次增加了资源系统 需要用 rccrcc main.qrc -o qrc_main.cpp同时,使用了windows下的资源文件 .rc (比如给程序添加图标)MVSC 中使用 rc.exe 对 .rc 文件进行处理MinGW 中使用 windres.exe 处理 .rc 文件qmakeTARGET = exampleTEMPLATE = libHEADERS = mainwindow.h widget.hSOURCES = main.cpp widget.cpp mainwindow.cppRESOURCES = main.qrcRC_FILE = main.rccmakePROJECT(example)CMAKE_MINIMUM_REQUIRED(VERSION 2.6)FIND_PACKAGE(Qt4 REQUIRED)SET(QT_USE_QTMAIN TRUE)INCLUDE(${QT_USE_FILE})INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})if(MINGW) set(CMAKE_RC_COMPILER_INIT windres) ENABLE_LANGUAGE(RC) SET(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")endif(MINGW)SET(example_SRCS main.cpp mainwindow.cpp widget.cpp res/main.rc)SET(example_MOC_SRCS mainwindow.h widget.h)QT4_WRAP_CPP(example_MOCS ${example_MOC_SRCS})QT4_ADD_RESOURCES(example_RCC_SRCS main.qrc)SET(example_SRCS ${example_SRCS} ${example_MOCS} ${example_RCC_SRCS})ADD_EXECUTABLE(example WIN32 main.cpp mainwindow.cpp ${example_SRCS})TARGET_LINK_LIBRARIES(example ${QT_LIBRARIES})对Qt的资源文件,使用 QT4_ADD_RESOURCES 来调用rcc进行预处理对 Windows 资源文件,直接和源文件一样,添加到列表中即可。只是:MinGW 下仅仅这么做还不行,上面的 MinGW 块用来修复这个问题Debug 与 Releaseqmake使用 qmake 时,可以在 pro 文件内分别为两种模式设置不同的选项。使用时,可以直接 make release 或 make debug 来编译不同的版本cmake不同于 qmake,由于 cmake 采用 out-of-source 方式。故:建立debug release两目录,分别在其中执行cmake -DCMAKE_BUILD_TYPE=Debug(或Release)需要编译不同版本时进入不同目录执行make对生成 msvc 工程的情况, CMAKE_BUILD_TYPE 不起作用。生成工程后使用IDE自带的模式选择。2023-06-09 10:10:401
ubuntu系统下的qt的cmake向导怎么打开
在Qt Creator中使用OpenCV库 (Windows 7系统下编译成功)编译OpenCV2.01 下载tdm-mingw-1.908.0-4.4.1-2并安装,安装完毕添加bin到系统路径。2 安装Opencv2.0 windows版本3 安装CMake4 打开CMake,配置源码与目标路径,选择MinGW Makefiles,生成目标Makefile5 进入设置好的目标路径,make,直至生成所有的库配置Qt CreatorQt开发的程序一般需要借助qmake生成makefile文件。由于qmake在解析路径的时候不能识别空格, 因此需要确保OpenCV的安装路径中不能包含空格(C:/Program Files/OpenCV是不行的)。在创建工程文件的时候(这里假设为hello.pro,后缀为pro),向工程中添加以下语句:INCLUDEPATH += D:/Qt/OpenCV-2.0.0/include/opencv LIBS += D:/Qt/OpenCV-2.0.0/lib/libcv200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libcxcore200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libml200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libcvaux200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libhighgui200.dll.a 这样,在Qt中就可以使用Opencv 2.0 了打开CMake,试一下,发现没法完成configure!原因是CMAKE_MAKE_PROGRAM没找到,这个简单,修改该项为D:/Qt/2010.04/mingw/bin(您自个看着改)。继续Configure,什么还出错?弹出一大堆什么dll找不到!!好吧,我直接把D:/Qt/2010.04/mingw/bin放到环境变量中去。Delete Catch以后再来一次,这下好了,连CMAKE_MAKE_PROGRAM都不用改了,自动找到。成功configure。然后Generate一下。2023-06-09 10:10:581
cmake 如何编译成debug版?
回复 7# qfmeal 这些参数是make工具的,--debug 只会让make在调用编译器gcc/g++干活的时候打印更多的东西,让你看到它详细的分析和处理指令的过程。2023-06-09 10:11:061
linux怎么安装mysql5.5.11
你好,Linux下安装MySQL方法如下,供参考,具体安装方式以你是用Linux版本不同有微笑的差异,但大致安装方法和思路不会变,2023-06-09 10:11:142
linux服务器如何切换pytorch版本
方法/步骤Anaconda安装:安装Anaconda ,首先想到的是到官方网站下载,不过速度太慢X1;之前有听说过清华镜像源有丰富的墙外资源,逛了下后发现该镜像源确实很强大,备份了普通人所需的大部分开源软件安装包如何在Linux下安装Pytorch选择安装包 Anaconda2-4.4.0-Linux-x86_64.sh(_64为64位)下载,千万不要选择最新的安装包(最新的Anaconda_5.0.1用的gcc版本为7.2,后续安装时提示gcc不能编译一个文件)如何在Linux下安装Pytorch补充一点,如果安装过程中添加环境变量选了"no",你需要手动添加环境变量时,可能在网上搜到的是"vi ~/.bashrc"这个命令,但是我推荐使用命令"gedit~/.bashrc"以文本格式打开环境配置如何在Linux下安装Pytorch另外,如果你在安装的时候没看到本文之前的内容选择了最新版本的Anaconda,那你可能需要重新安装Anaconda。Github配置:接下来要安装Pytorch了,直接在Pytorch官网上选择自己需要的配置,然后复制类似于"conda install pytorch torchvision -c soumith"命令到终端,接下来就准备开始Pytorch之旅如何在Linux下安装Pytorch但是意料之中的意外还是来了,安装包的下载速度太慢X2。接着查看相关的资料,了解到可以通过Pytorch源文件的方法来安装。Pytorch源文件安装的方式需要通过git工具把源库文件clone到本地(有网友指出download zip的方式下载PyTorch的源代码,在进行编译安装时会报错),而该指令需要有Github的帐号,并且需要配置ssh密钥如何在Linux下安装PytorchPytorch安装:历经重重困难,终于到了安装Pytorch的时刻了。再等一等,现在你还需要先配置环境变量NO_CUDA(本人只装CPU版本)和CMAKE_PREFIX_PATH(通过命令gedit ~/.bashrc可以通过文本方式打开.bashrc文件),接着用Anaconda安装Pytorch的依赖包,最后在进行Pytorch的安装。第三次安装完毕时出现了如下提示语句,发现没有error或者warning等词语就没管;结果进入python模式,输入import torch时出现提示"ImportError:No module named _C";如何在Linux下安装Pytorch我电脑上的usr/local/lib/python2.7/site-packages/torch文件夹下没有任何文件,回想之前安装Pytorch时的安装提示,发现需要用pytorch/torch.egg-info里的文件替掉/home/gene_leee/anaconda2/lib/python2.7/site-packages/torch-0.4.0a0+0fd9682-py2.7.egg-info里的文件,再次实验发现成功导入torch如何在Linux下安装Pytorch需要知道命令"python setup.py clean",用于清除上次安装失败的残余文件如何在Linux下安装Pytorch接下来安装TorchVision,TorchVision为PyTorch提供视频和图像方面的支持,包括数据库和模型等,安装好了之后可以很方便地导入很多图像数据库,比如cifar-10;按照TorchVision官网的方法2,成功安装。2023-06-09 10:11:461
CMake怎么装不起来
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。“CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。下载:在安装metis-5.0时,安装说明中要求必须安装CMake2.8版本,下面是CMake的安装和使用方法,记录下来以便以后学习。在网址 http://www.cmake.org/ 下载你所需要的CMake源码包cmake-2.8.8.tar..gz(版本不同,压缩包后缀不同),分为Unix/linux版本 和 windows版本 。1、安装有好几种安装CMake 的方法,因你所用的平台而异。(1)从源码安装Windows在CMake 下载页面 上有已编译好的二进制包。它提供的是一个可执行的安装程序。你还可以下载源码包并从源码包编译CMake。CMake下载页面还提供了已释出的源码和访问CVS的指令。为了从源码树编译CMake,你必须先要安装最新的CMake二进制版本,因为要用它来编译源码树。一旦装好了二进制版本的CMake,你就可以像编译其他项目一样使用CMake编译CMake了。一般来说,这意思是你要选择CMake源码目录作为源目录,然后再指定编译出来的可执行程序结果的位置。Linux, Mac OSX, UNIX & Cygwin在CMake 下载页面 上有许多UNIX平台上已经编译好的二进制包。下面有几种从源码树编译CMake的方法:解压:tar xvf cmake-2.8.8.tar.gz进入解压目录:cd cmake-2.8.8进行如下操作:(选择适合自己的操作步骤)如果还没有安装CMake,源码树中提供了一个 bootstrap 脚本:./bootstrapmakemake install(注:make install 一步是可选的,CMake 可以在编译目录下运行。)一个已经安装了的CMake也可以用于编译新版本的CMake:cmake .makemake install(注:make install 一步是可选的,CMake 可以在编译目录下运行。)在UNIX上,如果你不是使用的GNU C++编译器,你要告诉bootstrap 脚本你想用哪个编译器。这可以在运行configure命令前通过设置CC和CXX环境变量完成。例如,在一个带有7.3X编译器的SGI平台上,你可以像下面这样编译CMake:(setenv CXX CC; setenv CC cc; ./bootstrap)makemake install要查看bootstrap脚本的详细参数,请执行 ./bootstrap –help(2)从二进制安装sudo apt-get install cmake2、cmake 运行(1)运行cmake with GUI如果系统中有curses库的话,cmake将生成一个可执行文件ccmake,它是一个基于文本程序的终端,有点类似windows GUI。在源码目录中运行ccmake .,生成的二进制文件存放在源码目录下当然也可以在其他目录下运行ccmake,只是要指定你想编译的源码的路径ccmake的使用当我们在源码目录下运行ccmake . 时,终端将显示如下:当我们键入c时,ccmake将编译当我们键入方向键时,可以选择cache entry当我们键入enter时,可以编辑cache entry当我们键入g时,将生成Makefile,然后退出当我们键入h时,将弹出帮助文档当我们键入q时,将退出ccmake当我们键入t时,可以打开或关闭advanced cache entry(2)运行cmake from the command line如果源码没有太多的选项(在CMakeCache.txt文件中),可以只用cmake .来产生Makefile。如果源码选项太多,比如VTK,可以把参数-i传递给cmake,如:cmake -i .,cmake将让你为每一个cache file文件中的选项指定一个值,也能让你增加新的选项到文件CMakeCache.txt中,或者使用ccmake,或者使用CMakeSetup。当然,也可以传递设置选项的参数给cmake,如:cmake -DVARIABLE:TYPE=VALUE .3、 CMake cachecmake第一次运行的时候,它将产生一个文件叫CMakeCache.txt,该文件可以被看作一个配置文件,它里面的内容就像传递给configure命令的参数集,CMake GUI可以帮你很容易修改它,当然也可以直接对该文件做修改;如果你的CMakeLists.txt文件做过较大幅度的修改,你需要从cache中删除相关的选项,如果你还没有手动编辑过cache文件,在你重新运行cmake之前需删除它。4、 Cmake语法(1)基本概念cmake使用Cmake dfjs;dfasfLists.txt文件,该文件用include或者add_subdirectory命令来增加额外的输入文件。注释行以#开头到该行结尾命令是由命令名,加括号,括号中的参数用空白隔开,它可以是内建的命令如add_library,或者用户定义的宏或函数所有的空格,包含空白符,空行,tabs,当然除了用来隔开参数的空白,都被忽略2023-06-09 10:11:591
我在cmake配置opencv3.2的时候出现Error in configuration process,project files may be invalid
请问这个问题解决了吗?我也遇到了同样的问题,如果解决了麻烦告诉我怎么解决的,谢谢,7935221212023-06-09 10:12:084
如何安装apt-get
OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake。ubuntu下安装cmake比较简单,apt-get install cmakeapt-get install libgtk2.0-dev(下面两步安装编译必须的库)apt-get install pkg-config然后你们下载openc-2.4.3 然后 解压然后cmake-gui 进入了 ui配置界面 在路劲那里配置好你的opencv位置 和 安装路径然后点 configure 然后选中 unix makefiles 然后选 use xxxxxx compilter这跟命令行配置 cmake -D CMAKE_BUILD_TYPE=RELEASE CMAKE_INSTALL_PREFIX=/home/OpenCV 是一样的之后就是安装了 make 然后make install然后是配置变量sudo gedit /etc/ld.so.conf.d/opencv.conf最后一行增添 /usr/local/lib然后是跟改变量sudo gedit /etc/bash.bashrc也是在最后一行添加 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH码字辛苦 请给满意答案2023-06-09 10:12:171
海思平台配置toolchain.cmake
交叉编译,在我们的host宿主机器上需要生成target目标机器的程序, 使用CMake的Toolchain管理这里的各种环境变量和配置,就很好. CMake给交叉编译预留了一个变量-- CMAKE_TOOLCHAIN_FILE , 它定义了一个文件的路径, 这个文件就是 toolchain ,我们可以在里面配置 C_COMPILER , CXX_COMPILER ,如果用Qt的话需要更改 QT_QMAKE_EXECUTABLE 以及如果用 BOOST 的话需要更改的 BOOST_ROOT (具体查看相关 Findxxx.cmake 里面指定的路径), 因此,这个 toolchain 内嵌了一系列需要改变并且需要set的交叉环境的设置. 下面归纳一些比较重要的: 下面是一个常规的配置 这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条 -DCMAKE_TOOLCHAIN_FILE=./cross.toolChain.cmake ,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。 稍微大一点的项目都会用到一些外部依赖库或者tool,CMake提供了 FIND_PROGRAM() , FIND_LIBRARY() , FIND_FILE() , FIND_PATH() and FIND_PACKAGE() 等命令来进行外部依赖的搜索查找。 但是有个问题,假如我们在给一个ARM处理器的移动设备做交叉编译,其中需要寻找 libjpeg.so ,假如 FIND_PACKAGE(JPEG) 返回的是 /usr/lib/libjpeg.so ,那么这就会有问题,因为找到的这个 so 库只是给你的宿主机系统(例如一个x86的Ubuntu主机)服务的,不能用于Arm系统。所以你需要告诉CMake去其它地方去查找,这个时候你就需要配置以下的变量了: 在工程中一般通过如下步骤, 进入工程文件, 创建 arm-himix200-linux.cmake 文件, 内容是: 然后创建build文件夹, 进行编译(注意, 需要指定 CMAKE_MAKE_PROGRAM , 不指定的话好像编译有问题...): 在我的 toolchain 文件中,我指定: 因为我项目中 CMakeLists.txt 中需要查找 OpenSSL 和 curl , 因此会用到CMake自带的 FindOpenSSL.cmake 和 FindCurl.cmake 两个脚本, 他们会用到 Findxxx 命令, 会去我指定的目录去搜索对应的库 https://www.cnblogs.com/rickyk/p/3875334.html http://www.cmake.org/Wiki/CMake_Cross_Compiling2023-06-09 10:12:351
怎么配置cmakelist交叉编译
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 requiredSET(CMAKE_SYSTEM_NAME Linux)# specify the cross compilerSET(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 directoriesSET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)# configure Boost and QtSET(QT_QMAKE_EXECUTABLE /opt/qt-embedded/qmake)SET(BOOST_ROOT /opt/boost_arm)这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条-DCMAKE_TOOLCHAIN_FILE=./toolChain.cmake,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。2023-06-09 10:12:421
linux cmake后怎么调试
1.安装gcc等必备程序包,在cmake安装包的网站中选择binarydistribution下的linuxx86_64下的cmake-3.6.0-Linux-x8664.tar.gz压缩包,点击,下载。默认下载到了home/DOWNLOAD2.把下载好的包复制到指定路径,比如/home/bnu,在当前文件夹中打开终端,输入3.tarzxvfcmake-3.6.0-Linux-x8664.tar.gz在该目录下多了一个解压后的文件夹4.打开新的终端,./bootstrapmakemakeinstall5.此时会打开一个文件/root/.bashrc,找到exportPATH=这些行,在这些行的下面另外添加一行,从而设置环境变量exportPATH=$PATH:/home/bnu/cmake-3.6.0-Linux-x8664/bin输入完毕保存6.查看版本,测试是否安装成功:打开终端,输入cmake--version结果是:cmakeversion3.6.0(安装cmake成功!)要知道,在根目录下安装cmake,那么不同用户都可以共享使用这个cmake.2023-06-09 10:12:491
linux下怎么安装cmake
1.安装gcc等必备程序包,在cmake安装包的网站中选择binary distribution下的linux x86_64下的cmake-3.6.0-Linux-x86 64.tar.gz压缩包,点击,下载。默认下载到了home/DOWNLOAD2.把下载好的包复制到指定路径,比如/home/bnu,在当前文件夹中打开终端,输入3.tar zxvf cmake-3.6.0-Linux-x86 64.tar.gz 在该目录下多了一个解压后的文件夹4.打开新的终端,./bootstrapmakemakeinstall5.此时会打开一个文件/root/.bashrc,找到export PATH=这些行,在这些行的下面另外添加一行,从而设置环境变量export PATH=$PATH:/home/bnu/cmake-3.6.0-Linux-x86 64/bin输入完毕保存6.查看版本,测试是否安装成功:打开终端,输入cmake --version结果是:cmake version 3.6.0(安装cmake成功!)要知道,在根目录下安装cmake,那么不同用户都可以共享使用这个cmake.2023-06-09 10:12:581
cmake编译opencv总是出错 求助啊
在点击configure时,会出来一个选择编译器的框,你选一个你机器里有的编译器就可以了。CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。2023-06-09 10:13:073
如何在Linux下安装cmake-gui
OpenCV 2.2以后的版本需要使用Cmake生成makefile文件,因此需要先安装cmake;还有其它一些软件都需要先安装cmake1.在linux环境下打开网页浏览器,输入网址:http://www.cmake.org/cmake/resources/software.html,找到最新版本的位置。一般开放源代码软件都会有两个版本发布:Source Distribution 和 Binary Distribution,前者是源代码版,你需要自己编译成可执行软件。后者是已经编译好的可执行版,直接可以拿来用的。2.在linux环境下打开终端,输入:getconf LONG_BIT 如果结果是64表示该系统是linux64位的,如果结果是32则表示系统是linux32位。3.我现在所用的这台是64位,因此在cmake安装包的网站中选择binary distribution下的linux x86_64下的cmake-3.6.0-Linux-x86 64.tar.gz压缩包,点击,下载。默认下载到了home/DOWNLOAD4.把下载好的包复制到指定路径,比如/home/bnu,在当前文件夹中打开终端,输入tar zxvf cmake-3.6.0-Linux-x86 64.tar.gz 在该目录下多了一个解压后的文件夹5.打开新的终端,输入该bashrc文件不用提前建立,路径也根据自己的情况改变,我定的路径与解压后的cmake包路径是一致的6.此时会打开一个文件,找到export PATH=这些行,在这些行的下面另外添加一行,从而设置环境变量export PATH=$PATH:/home/bnu/cmake-3.6.0-Linux-x86 64/bin输入完毕保存7.查看版本,测试是否安装成功:打开终端,输入cmake --version结果是:cmake version 3.6.0(安装cmake成功!)2023-06-09 10:13:161
如何更新cmake的qt的ts文件
在Qt Creator中使用OpenCV库 (Windows 7系统下编译成功)编译OpenCV2.01 下载tdm-mingw-1.908.0-4.4.1-2并安装,安装完毕添加bin到系统路径。2 安装Opencv2.0 windows版本3 安装CMake4 打开CMake,配置源码与目标路径,选择MinGW Makefiles,生成目标Makefile5 进入设置好的目标路径,make,直至生成所有的库配置Qt CreatorQt开发的程序一般需要借助qmake生成makefile文件。由于qmake在解析路径的时候不能识别空格, 因此需要确保OpenCV的安装路径中不能包含空格(C:/Program Files/OpenCV是不行的)。在创建工程文件的时候(这里假设为hello.pro,后缀为pro),向工程中添加以下语句:INCLUDEPATH += D:/Qt/OpenCV-2.0.0/include/opencv LIBS += D:/Qt/OpenCV-2.0.0/lib/libcv200.dll.a/ D:/Qt/OpenCV-2.0.0/lib/libcxcore200.dll.a/ D:/Qt/OpenCV-2.0.0/lib/libml200.dll.a/ D:/Qt/OpenCV-2.0.0/lib/libcvaux200.dll.a/ D:/Qt/OpenCV-2.0.0/lib/libhighgui200.dll.a 这样,在Qt中就可以使用Opencv 2.0 了打开CMake,试一下,发现没法完成configure!原因是CMAKE_MAKE_PROGRAM没找到,这个简单,修改该项为D:/Qt/2010.04/mingw/bin(您自个看着改)。继续Configure,什么还出错?弹出一大堆什么dll找不到!!好吧,我直接把D:/Qt/2010.04/mingw/bin放到环境变量中去。Delete Catch以后再来一次,这下好了,连CMAKE_MAKE_PROGRAM都不用改了,自动找到。成功configure。然后Generate一下。2023-06-09 10:13:231
设置OpenCV_DIR,使cmake自动找到opencv
通过如下方式配置opencv时,有些时候,cmake找不到opencv而报错 这时有两种方式解决这个问题。分别如下: 在CMakeLists.txt中指明OpenCV_DIR 添加环境变量 OpenCV_DIR ,值为能找到OpenCVConfig.cmake或者OpenCVConfig-version.cmake的opencv路径 这样就不用在CMakeLists.txt中添加 OpenCV_DIR 的配置了。cmake会自动找到opencv。 在终端窗口中输入: export OpenCV_DIR=/usr/local/opencv-3.1.0 编辑/edt/profile 文件 sudo gedit /edt/profile 添加如下语句 export OpenCV_DIR=/usr/local/opencv-3.1.0 编辑完退出 使配置生效 source /etc/profile2023-06-09 10:13:301
用Cmake配置Opencv时,configure不过去 出现erroe如下:
现在的OPENCV2.3已经有预编译好的库了(对于VS2010来说),不需要用CMAKE了。2023-06-09 10:13:393
opencv的安装问题
CMakeLists.txt第四行要指定LIB目录2023-06-09 10:13:473
qt打开cmake工程keyvalue不显示
在Qt Creator中使用OpenCV库 (Windows 7系统下编译成功)编译OpenCV2.01 下载tdm-mingw-1.908.0-4.4.1-2并安装,安装完毕添加bin到系统路径。2 安装Opencv2.0 windows版本3 安装CMake4 打开CMake,配置源码与目标路径,选择MinGW Makefiles,生成目标Makefile5 进入设置好的目标路径,make,直至生成所有的库配置Qt CreatorQt开发的程序一般需要借助qmake生成makefile文件。由于qmake在解析路径的时候不能识别空格, 因此需要确保OpenCV的安装路径中不能包含空格(C:/Program Files/OpenCV是不行的)。在创建工程文件的时候(这里假设为hello.pro,后缀为pro),向工程中添加以下语句:INCLUDEPATH+=D:/Qt/OpenCV-2.0.0/include/opencvLIBS+=D:/Qt/OpenCV-2.0.0/lib/libcv200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libcxcore200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libml200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libcvaux200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libhighgui200.dll.a这样,在Qt中就可以使用Opencv 2.0 了打开CMake,试一下,发现没法完成configure!原因是CMAKE_MAKE_PROGRAM没找到,这个简单,修改该项为D:/Qt/2010.04/mingw/bin(您自个看着改)。继续Configure,什么还出错?弹出一大堆什么dll找不到!!好吧,我直接把D:/Qt/2010.04/mingw/bin放到环境变量中去。Delete Catch以后再来一次,这下好了,连CMAKE_MAKE_PROGRAM都不用改了,自动找到。成功configure。然后Generate一下。2023-06-09 10:14:125
Qt执行Cmake时Cmake出现这种情况时为什么
在Qt Creator中使用OpenCV库 (Windows 7系统下编译成功)编译OpenCV2.01 下载tdm-mingw-1.908.0-4.4.1-2并安装,安装完毕添加bin到系统路径。2 安装Opencv2.0 windows版本3 安装CMake4 打开CMake,配置源码与目标路径,选择MinGW Makefiles,生成目标Makefile5 进入设置好的目标路径,make,直至生成所有的库配置Qt CreatorQt开发的程序一般需要借助qmake生成makefile文件。由于qmake在解析路径的时候不能识别空格, 因此需要确保OpenCV的安装路径中不能包含空格(C:/Program Files/OpenCV是不行的)。在创建工程文件的时候(这里假设为hello.pro,后缀为pro),向工程中添加以下语句:INCLUDEPATH += D:/Qt/OpenCV-2.0.0/include/opencv LIBS += D:/Qt/OpenCV-2.0.0/lib/libcv200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libcxcore200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libml200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libcvaux200.dll.a/D:/Qt/OpenCV-2.0.0/lib/libhighgui200.dll.a 这样,在Qt中就可以使用Opencv 2.0 了打开CMake,试一下,发现没法完成configure!原因是CMAKE_MAKE_PROGRAM没找到,这个简单,修改该项为D:/Qt/2010.04/mingw/bin(您自个看着改)。继续Configure,什么还出错?弹出一大堆什么dll找不到!!好吧,我直接把D:/Qt/2010.04/mingw/bin放到环境变量中去。Delete Catch以后再来一次,这下好了,连CMAKE_MAKE_PROGRAM都不用改了,自动找到。成功configure。然后Generate一下。2023-06-09 10:14:251
win7系统下用cmake配置opencv一直出错是什么原因
tp://www.cmake.org/cmake/resources/software.html" target="_blank">http://www.cmake.org/cmake/resources/software.html 下载 Windows (Win32 Installer) 安装。用CMake导出VC++项目文件运行cmake-gui,设置路径为OpenCV安装路径(本文档假定安装位置为:D:Program FilesOpenCV2.0),并创建子目录D:Program FilesOpenCV2.0vc2008,用于存放编译结果。 然后点 configure,在弹出的对话框内选择 Visual Studio 9 2008。 如果是VC++2008的Express版本,则不支持OpenMP,所以需要取消ENABLE_OPENMP选项。VC++ 2008(不是Express版本)支持OpenMP,如果你使用VC++2008,强烈建议不要取消这个选项。编译 OpenCV Debug和Release版本库完成上一步骤后,将在D:Program FilesOpenCV2.0vc2008目录下生成OpenCV.sln的VC Solution File,请用VC++ 2008 打开OpenCV.sln,然后执行如下操作: 在Debug下,选择Solution Explorer里的 Solution OpenCV,点右键,运行"Rebuild Solution";如编译无错误,再选择INSTALL项目,运行"Build"。 在Release下,选择Solution Explorer里的 Solution OpenCV,点右键,运行"Rebuild Solution";如编译无错误,再选择INSTALL项目,运行"Build"。 此时,OpenCV的*d.dll文件(for debug)和*.dll文件(for release)将出现在D:Program FilesOpenCV2.0vc2008in目录中;OpenCV的*d.lib文件(for debug)和*.lib文件(for release)将出现在D:Program FilesOpenCV2.0vc2008lib目录;头文件*.h出现在D:Program FilesOpenCV2.0vc2008includeopencv中。 可以被VC++ 2008 调用的OpenCV动态库生成完毕。配置Windows环境变量Path将D:Program FilesOpenCV2.0vc2008in加入Windows系统环境变量Path中。加入后可能需要注销当前Windows用户(或重启)后重新登陆才生效为VC++ 2008 配置OpenCV环境打开VC++ 2008 ,菜单 Tools -> Options -> Projects and Solutions -> VC++ Directories Show directories for选择include files,加入目录 D:Program FilesOpenCV2.0vc2008includeopencv Show directories for选择library files,加入目录 D:Program FilesOpenCV2.0vc2008lib 关闭VC++ 20082023-06-09 10:14:311
CMake里面怎么递归地设定头文件的搜索目录
CMake头文件搜索路径# 中午吃完饭,就到了办公室,开始看 OGRE 的CMake配置文件。# 想根据实例,再配合 CMake 安装包里自带了官方Manual,学习CMakeLists文件的编写。# 不得不承认,没有外网真心惨。用手机查资料眼睛都瞅瞎了。# 中间出去吃了个晚饭,然后一直研究到10点,还算是有点收获本文内容要点:1. 多目录下,头文件路径包含2. 项目依赖关系设置3. 发现的一些问题本文涉及到的CMake命令:project(name) : 设置project的名字为name。add_dependencies:设置依赖关系add_subdirectory:添加子目录add_executable:添加可执行文件add_library:添加库cmake_minimum_required:设置cmake最低版本要求include_directories:包含目录target_link_libraries:链接库set:可以用于设置变量补充命令:file(GLOB_RECURSE HEADER_FILES dir/*.h??)此命令可以用来收集源文件 HEADER_FILES 作为变量保存收集的结果。 后面为文件过滤器,其中dir为起始搜索的文件夹,即在dir目录下,开始收集,而且会遍历子目录。 ? 代表 a-z。首先给出目录结构(“-”表示目录级数)-sin--include---sin.h--src---sin.cpp-sinutil--include---sinutil.h--src---sinutil.cpp-main--main.cpp目的:main.cpp 要使用 sin 里面 sin.h 和 sin.cpp 生成的静态库 sin.lib,而 sin.lib 的生成要使用 sinutil 里面的 sinutil.h 和 sinutil.cpp 生成的静态库 sinutil.lib 。sinutil.cpp 要包含 sinutil.h,而 sinutil.h 不在 sinutil.cpp 目录下。同理 sin.cpp 也要包含 sinutil.h ,main.cpp 要包含 sin.h。根据CMake的规则,在根目录下和每个子目录下加入 CMakeLists.txt 文件。# 为了便于区分,我给每个 CMakeLists.txt 加了编号后缀。# 真正运行的时候,CMake配置文件只能命名为 CMakeLists.txt。得到的目录结构如下:- CMakeLists.txt - 1-sin-- CMakeLists.txt - 2--include---sin.h--src---sin.cpp-sinutil-- CMakeLists.txt - 3--include---sinutil.h--src---sinutil.cpp-main-- CMakeLists.txt - 4--main.cppCMake配置文件内容如下:#CMakeLists.txt - 1cmake_minimum_required(VERSION 2.8.1)project(CMakeDemo)include_directories(${CMakeDemo_SOURCE_DIR}/sin/include)include_directories(${CMakeDemo_SOURCE_DIR}/sinutil/include)add_subdirectory(sin)add_subdirectory(sinutil)add_subdirectory(main)#CMakeLists.txt - 4project(MainDemo)set(SRC_LIST main.cpp)add_executable(demo ${SRC_LIST})add_dependencies(demo SinLibrary)target_link_libraries(demo ${SinLibrary})#CMakeLists.txt - 2set(HEADER_LIST include/sin.h)set(SRC_LIST src/sin.cpp)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)add_library(SinLibrary ${HEADER_LIST} ${SRC_LIST})add_dependencies(SinLibrary SinUtilLibrary)target_link_libraries(SinLibrary ${SinUtilLibrary})#CMakeLists.txt - 3set(HEADER_LIST include/sinutil.h)set(SRC_LIST src/sinutil.cpp)include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)add_library(SinUtilLibrary ${HEADER_LIST} ${SRC_LIST})结论:1. CMake使用 include_directories 命令来添加头文件包含路径,且 include_directories 命令具有继承性。下级目录继承了上级目录中CMakeLists.txt 里面 include 的 directrories。但是平级目录之间的 CMakeList.txt 里面的include_directories 不能共享。2. CMAKE_CURRENT_SOURCE_DIR 为 CMake 定义的环境变量,指向当前 CMakeLists.txt 所在的目录。3. 当使用 project(name) 命令时,CMake会自动生成两个变量 name_SOURCE_DIR 和 name_BINARY_DIR,前一个指向使用 project 命令的CMakeLists.txt 所在的文件夹,后一个指向用cmake构建时,Build 目录下对应的目录。问题:1. 目前还没搞清 project 与 VS 里面的 解决方案(solution)和 工程(项目,project)的对应关系。2. 使用 add_dependencies 来设置依赖关系时,在VS 2003 下,会为每一个subdirectory里面的project生成一个额外的带 UTILITY 后缀的工程,能不生成吗?2023-06-09 10:14:391
CMake怎么装不起来
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。“CMake”这个名字是“cross platform make”的缩写。虽然名字中含有“make”,但是CMake和Unix上常见的“make”系统是分开的,而且更为高阶。 下载: 在安装metis-5.0时,安装说明中要求必须安装CMake2.8版本,下面是CMake的安装和使用方法,记录下来以便以后学习。在网址 http://www.cmake.org/ 下载你所需要的CMake源码包cmake-2.8.8.tar..gz(版本不同,压缩包后缀不同),分为Unix/linux版本 和 windows版本 。1、安装有好几种安装CMake 的方法,因你所用的平台而异。(1)从源码安装Windows在CMake 下载页面 上有已编译好的二进制包。它提供的是一个可执行的安装程序。你还可以下载源码包并从源码包编译CMake。CMake下载页面还提供了已释出的源码和访问CVS的指令。为了从源码树编译CMake,你必须先要安装最新的CMake二进制版本,因为要用它来编译源码树。一旦装好了二进制版本的CMake,你就可以像编译其他项目一样使用CMake编译CMake了。一般来说,这意思是你要选择CMake源码目录作为源目录,然后再指定编译出来的可执行程序结果的位置。Linux, Mac OSX, UNIX & Cygwin在CMake 下载页面 上有许多UNIX平台上已经编译好的二进制包。下面有几种从源码树编译CMake的方法:解压:tar xvf cmake-2.8.8.tar.gz进入解压目录:cd cmake-2.8.8进行如下操作:(选择适合自己的操作步骤)如果还没有安装CMake,源码树中提供了一个 bootstrap 脚本:./bootstrapmakemake install(注:make install 一步是可选的,CMake 可以在编译目录下运行。)一个已经安装了的CMake也可以用于编译新版本的CMake:cmake .makemake install(注:make install 一步是可选的,CMake 可以在编译目录下运行。)在UNIX上,如果你不是使用的GNU C++编译器,你要告诉bootstrap 脚本你想用哪个编译器。这可以在运行configure命令前通过设置CC和CXX环境变量完成。例如,在一个带有7.3X编译器的SGI平台上,你可以像下面这样编译CMake:(setenv CXX CC; setenv CC cc; ./bootstrap)makemake install要查看bootstrap脚本的详细参数,请执行 ./bootstrap –help(2)从二进制安装sudo apt-get install cmake2、cmake 运行(1)运行cmake with GUI如果系统中有curses库的话,cmake将生成一个可执行文件ccmake,它是一个基于文本程序的终端,有点类似windows GUI。在源码目录中运行ccmake .,生成的二进制文件存放在源码目录下当然也可以在其他目录下运行ccmake,只是要指定你想编译的源码的路径ccmake的使用当我们在源码目录下运行ccmake . 时,终端将显示如下:当我们键入c时,ccmake将编译当我们键入方向键时,可以选择cache entry当我们键入enter时,可以编辑cache entry当我们键入g时,将生成Makefile,然后退出当我们键入h时,将弹出帮助文档当我们键入q时,将退出ccmake当我们键入t时,可以打开或关闭advanced cache entry(2)运行cmake from the command line如果源码没有太多的选项(在CMakeCache.txt文件中),可以只用cmake .来产生Makefile。如果源码选项太多,比如VTK,可以把参数-i传递给cmake,如:cmake -i .,cmake将让你为每一个cache file文件中的选项指定一个值,也能让你增加新的选项到文件CMakeCache.txt中,或者使用ccmake,或者使用CMakeSetup。当然,也可以传递设置选项的参数给cmake,如: cmake -DVARIABLE:TYPE=VALUE .3、 CMake cachecmake第一次运行的时候,它将产生一个文件叫CMakeCache.txt,该文件可以被看作一个配置文件,它里面的内容就像传递给configure命令的参数集,CMake GUI可以帮你很容易修改它,当然也可以直接对该文件做修改;如果你的CMakeLists.txt文件做过较大幅度的修改,你需要从cache中删除相关的选项,如果你还没有手动编辑过cache文件,在你重新运行cmake之前需删除它。4、 Cmake语法(1)基本概念cmake使用Cmake dfjs;dfasfLists.txt文件,该文件用include或者add_subdirectory命令来增加额外的输入文件。注释行以#开头到该行结尾命令是由命令名,加括号,括号中的参数用空白隔开,它可以是内建的命令如add_library,或者用户定义的宏或函数所有的空格,包含空白符,空行,tabs,当然除了用来隔开参数的空白,都被忽略2023-06-09 10:14:451
一,为什么用CMake
Cmake可以通过让开发者描述build参数在一个简单地可以移植的文本文件里,这个文件能够被cmake用来产生类似于MS Visual Studio和Apple"s Xcode的项目文件,当然也有*NIX下的Makefile。Cmake给同一平台,多机开发环境的很多帮助:自动搜索所需要的程序,库,头文件的能力,这包含了环境变量和windows的注册表等信息能够在源码树外进行build,这个功能在很多UNIX环境下很有益处,这个功能使得开发者可以很轻松的删掉整个build目录,而不会担心误删源码文件创建复杂自定义命令的能力,比如自动生成Qt的moc文件等等提供配置选项用于额外的组件,比如几个VTK的库是可选的,那么CMake提供选择build哪些库能够从一个简单地text文件自动生成workspace和project文件能够很简单的选择使用静态库还是共享库自动生成文件依赖,并且支持并行build当开发跨平台的软件时,CMake还能提供其他特性:能够测试平台的字节序和其他硬件特性一整套的build配置文件,能够在多平台上很好地工作支持在多平台上创建共享库最近CMake项目的进展是拥有了软件测试支持——CTest,此外还有个CPack,是设计用来支持跨平台分发软件的,能够创建本地安装文件,比如可以被NSIS,RPM,Cygwin等使用。此外还有支持了XCode和VS10。加入了交叉编译功能,CMake能够很好地处理host系统和目标系统的区别。2023-06-09 10:14:541