当前位置: 首页 > news >正文

河南制作网站郑州的网络科技有限公司

河南制作网站,郑州的网络科技有限公司,外贸网站建设 佛山,wordpress一直加载文章目录 1、简介2、下载cmake3、安装cmake4、测试cmake4.1 单个源文件4.2 同一目录下多个源文件4.3 不同目录下多个源文件4.4 标准组织结构4.5 动态库和静态库的编译4.6 对库进行链接4.7 添加编译选项4.8 添加控制选项 5、构建最小项目5.1 新建代码文件5.2 新建CMakeLists.txt… 文章目录 1、简介2、下载cmake3、安装cmake4、测试cmake4.1 单个源文件4.2 同一目录下多个源文件4.3 不同目录下多个源文件4.4 标准组织结构4.5 动态库和静态库的编译4.6 对库进行链接4.7 添加编译选项4.8 添加控制选项 5、构建最小项目5.1 新建代码文件5.2 新建CMakeLists.txt5.3 构建项目5.4 编译项目5.5 运行项目5.6 修改相关文件 结语 1、简介 官网地址 https://cmake.org CMake是一个跨平台的安装编译工具可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件能测试编译器所支持的C特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。 2、下载cmake 1官网下载地址一 https://cmake.org/download/ 2官网下载地址二 https://cmake.org/files/ 3GitHub下载地址 https://github.com/Kitware/CMake/releases ubuntu系统下只需要如下一句命令即可: # ubuntu sudo apt install cmakeCMake 提供了多种版本包括但不限于 “RC 版本”Release Candidate和“稳定版本”Latest Release。切换到系统存放源代码的目录再用 curl 命令通过该链接将 CMake 的二进制分发压缩包下载下来 cd /usr/local/srccurl -LO https://github.com/Kitware/CMake/releases/download/v3.22.2/cmake-3.22.2-linux-x86_64.tar.gz# or yum install -y wget wget -c https://github.com/Kitware/CMake/releases/download/v3.22.2/cmake-3.22.2-linux-x86_64.tar.gz # wget -c https://cmake.org/files/v3.26/cmake-3.26.0-rc1-linux-x86_64.tar.gz3、安装cmake CMake 二进制分发压缩包下载完毕后运行以下两条命令将压缩包解压缩并将得到的文件夹移动到系统的本地程序目录同时将文件夹重命名为 cmake即 /usr/local/cmake tar -xvf cmake-3.26.0-rc1-linux-x86_64.tar.gz # tar zxvf cmake-3.22.2-linux-x86_64.tar.gz mv cmake-3.26.0-rc1-linux-x86_64 /usr/local/cmake查看安装后的路径 ls /usr/local/cmake如果你是第一次按照本文步骤安装 CMake为方便之后运行 CMake 的相关命令请运行以下两条命令将 CMake 的可执行文件目录添加到系统环境变量 PATH 中 echo export PATH/usr/local/cmake/bin:$PATH ~/.bashrc source ~/.bashrc查看~/.bashrc vi ~/.bashrc #在最后添加export PATH/usr/local/cmake/bin:$PATH查看cmake的版本 cmake --verison4、测试cmake 4.1 单个源文件 main.c: #include stdio.hint main(void) {printf(Hello World\n);return 0; }然后在main.c相同目录下编写CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (demo) add_executable(main main.c)执行命令 cmake .再来看看目录下的文件成功生成了Makefile还有一些cmake运行时自动生成的文件 查看Makefile vi Makefile输入make命令进行编译 make ls ./main #make clean4.2 同一目录下多个源文件 安装tree命令方便查看文件夹的层级关系 ubuntusudo apt-get install tree centosyum -y install treetree ./修改CMakeLists.txt: cmake_minimum_required (VERSION 2.8)project (demo) add_executable(main main.c anotherTest.c)执行命令 cmake . ls make ./main如果在同一目录下有多个源文件。cmake提供了一个命令可以把指定目录下所有的源文件存储在一个变量中这个命令就是 aux_source_directory(dir var)。第一个参数dir是指定目录第二个参数var是用于存放源文件列表的变量。 修改CMakeLists.txt: cmake_minimum_required (VERSION 2.8)project (demo) aux_source_directory(. SRC_LIST) add_executable(main ${SRC_LIST})使用aux_source_directory把当前目录下的源文件存列表存放到变量SRC_LIST里然后在add_executable里调用SRC_LIST注意调用变量时的写法。 aux_source_directory()也存在弊端它会把指定目录下的所有源文件都加进来可能会加入一些我们不需要的文件此时我们可以使用set命令去新建变量来存放需要的源文件如下 cmake_minimum_required (VERSION 2.8)project (demo) set( SRC_LIST./main.c./anotherTest.c)add_executable(main ${SRC_LIST})4.3 不同目录下多个源文件 修改CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (demo)include_directories (test1 test2)aux_source_directory (test1 SRC_LIST) aux_source_directory (test2 SRC_LIST1)add_executable (main main.c ${SRC_LIST} ${SRC_LIST1})4.4 标准组织结构 一般会把源文件放到src目录下把头文件放入到include文件下生成的对象文件放入到build目录下最终输出的elf文件会放到bin目录下这样整个结构更加清晰。 修改CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (demo)add_subdirectory (src)这里指定src目录下存放了源文件当执行cmake时就会进入src目录下去找src目录下的CMakeLists.txt所以在src目录下也建立一个CMakeLists.txt 添加CMakeLists.txt: aux_source_directory (. SRC_LIST) include_directories (../include) add_executable (main ${SRC_LIST}) set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)这里又出现一个新的命令set是用于定义变量的EXECUTABLE_OUT_PATH和PROJECT_SOURCE_DIR是CMake自带的预定义变量其意义如下 EXECUTABLE_OUTPUT_PATH 目标二进制可执行文件的存放位置 PROJECT_SOURCE_DIR工程的根目录 新建build文件夹然后进入 mkdir build cd build cmake .. make ls ../bin/main也可以只使用一个CMakeLists.txt把最外层的CMakeLists.txt内容改成如下: cmake_minimum_required (VERSION 2.8) project (demo)set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) aux_source_directory (src SRC_LIST) include_directories (include) add_executable (main ${SRC_LIST})4.5 动态库和静态库的编译 有时需要编译出动态库和静态库然后等着让其它程序去使用。测试工程文件夹如下 Windows示例如下 CMakeLists.txt内容如下 cmake_minimum_required (VERSION 2.8)project (myrand)# find *.cpp *.c set (SRC_LIST ${PROJECT_SOURCE_DIR}/src/getRandomAPI.cpp)# find *.h include_directories (${PROJECT_SOURCE_DIR}/include)######################################## # create lib and dll add_library (myrand_shared SHARED ${SRC_LIST}) add_library (myrand_static STATIC ${SRC_LIST})set_target_properties (myrand_shared PROPERTIES OUTPUT_NAME myrand) set_target_properties (myrand_static PROPERTIES OUTPUT_NAME myrand_s)set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)######################################## # create exe add_compile_options(-stdc11 -Wall) set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) add_executable (myrand_test ${SRC_LIST})命令解释如下 1add_library: 生成动态库或静态库(第1个参数指定库的名字第2个参数决定是动态还是静态如果没有就默认静态第3个参数指定生成库的源文件) 2set_target_properties: 设置最终生成的库的名称还有其它功能如设置库的版本号等等 3LIBRARY_OUTPUT_PATH: 库文件的默认输出路径这里设置为工程目录下的lib目录在build目录下运行cmake并把生成的库文件.dll、.lib存放到lib文件夹下exe放到bin文件夹里。执行命令如下 cd C:\Users\tomcat\Desktop\test_cmake mkdir build cd build cmake ..打开build文件夹如下 通过命令行编译myrand.sln如下。 # release x64(默认) cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE .\devenv.com C:\Users\tomcat\Desktop\test_cmake\build\myrand.sln /Build# or debug x64 .\devenv.com F:\00Projects\test.sln /Build Debug|64# or debug win32 .\devenv.com F:\00Projects\test.sln /Build Debug|Win32运行结果如下 运行结果文件夹如下 4.6 对库进行链接 在src目录下添加一个main.cpp调用上面一节生成的库文件。 cmake_minimum_required (VERSION 2.8) project (myrand_test)set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set (SRC_LIST ${PROJECT_SOURCE_DIR}/src/main.cpp)# find *.h include_directories (${PROJECT_SOURCE_DIR}/include)find_library(TEST_LIB NAMES myrand HINTS ${PROJECT_SOURCE_DIR}/lib/debug)add_executable (test ${SRC_LIST}) target_link_libraries (test ${TEST_LIB})执行命令 cmake ..4.7 添加编译选项 添加一些编译选项如-Wall-stdc11等就可以使用add_compile_options来进行操作。 cmake_minimum_required (VERSION 2.8) project (test)set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) add_compile_options(-stdc11 -Wall) add_executable(test main.cpp)4.8 添加控制选项 有时只编译一些指定的源码可以使用cmake的option命令 1、本来要生成多个bin或库文件现在只想生成部分指定的bin或库文件 2、对于同一个bin文件只想编译其中部分代码使用宏来控制CMakeLists.txt内容如下 cmake_minimum_required(VERSION 3.0) project(test)set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) set (SRC_LIST ${PROJECT_SOURCE_DIR}/src/main.cpp) set (SRC_LIST2 ${PROJECT_SOURCE_DIR}/src/main2.cpp)option(USE_TEST_1 use test 1 OFF) option(USE_TEST_2 use test 2 OFF) option(USE_TEST_3 use test 3 OFF)if (USE_TEST_1)add_definitions(-DTEST_1) endif()if (USE_TEST_2)add_definitions(-DTEST_2) endif()if (USE_TEST_3)add_definitions(-DTEST_3) endif()add_executable(main ${SRC_LIST})if (USE_PROJECT2)add_executable(main2 ${SRC_LIST2}) else()message(STATUS No project main2) endif()main.cpp #include windows.h #include iostreamint main() { #ifdef TEST_1printf(getRandom_1\n); #endif#ifdef TEST_2printf(getRandom_2\n); #endif#ifdef TEST_3printf(getRandom_3\n); #endifsystem(pause);return 0; }cmake .. -DTEST_3ON -DTEST_2OFF -DUSE_PROJECT2OFF cmake .. -DTEST_3ON make5、构建最小项目 5.1 新建代码文件 编辑代码文件tutorial.cpp tutorial.cpp // tutorial.cpp#include cmath #include cstdlib #include iostream #include stringint main(int argc, char* argv[]) {if (argc 2) {std::cout Usage: argv[0] number std::endl;return 1;}// convert input to doubleconst double inputValue atof(argv[1]);// calculate square rootconst double outputValue sqrt(inputValue);std::cout (爱看书的小沐)The square root of inputValue is outputValue std::endl;return 0; }5.2 新建CMakeLists.txt 在同一个文件夹内新建文件CMakeLists.txt。 CMakeLists.txt cmake_minimum_required(VERSION 3.15)# set the project name project(Tutorial)# add the executable add_executable(Tutorial tutorial.cpp)cmake_minimum_required指定使用 CMake 的最低版本号 project指定项目名称 add_executable用来生成可执行文件需要指定生成可执行文件的名称和相关源文件。 现在开始构建、编译和运行上面代码示例。 5.3 构建项目 在当前项目工作文件夹创建一个构建目录 build接下来进入 build 目录并运行 CMake 来配置项目并生成构建系统。 mkdir build cd build cmake ..命令执行情况 生成文件和文件夹如下 5.4 编译项目 然后调用该构建系统来实际编译/链接项目 cmake --build .生成文件和文件夹如下 5.5 运行项目 .\debug\Tutorial.exe 3.14运行结果如下 5.6 修改相关文件 编辑代码文件CMakeLists.txt CMakeLists.txt cmake_minimum_required(VERSION 3.15)## set the project name # project(Tutorial) project(Tutorial VERSION 1.2.3)string(TIMESTAMP COMPILE_TIME %Y%m%d-%H%M%S) configure_file(TutorialConfig.h.in TutorialConfig.h)# set(SRC_LIST a.cpp b.cpp c.cpp) SET(SRC_LIST tutorial.cpp)## add the executable # add_executable(Tutorial tutorial.cpp) # add_executable(${PROJECT_NAME} tutorial.cpp) # add_executable(${PROJECT_NAME} a.cpp b.cpp c.cpp) add_executable(${PROJECT_NAME} ${SRC_LIST})target_include_directories(${PROJECT_NAME} PUBLIC${PROJECT_BINARY_DIR} )新建文件TutorialConfig.h.in TutorialConfig.h.in // the configured options and settings for Tutorial #define Tutorial_VERSION_MAJOR PROJECT_VERSION_MAJOR #define Tutorial_VERSION_MINOR PROJECT_VERSION_MINOR #define Tutorial_VERSION_PATCH PROJECT_VERSION_PATCH#define TIMESTAMP COMPILE_TIME编辑代码文件tutorial.cpp tutorial.cpp // tutorial.cpp#include cmath #include cstdlib #include iostream #include string #include TutorialConfig.hint main(int argc, char* argv[]) {if (argc 2) {std::cout argv[0] Version Tutorial_VERSION_MAJOR . Tutorial_VERSION_MINOR std::endl;std::cout Usage: argv[0] number std::endl;return 1;}// convert input to doubleconst double inputValue atof(argv[1]);// calculate square rootconst double outputValue sqrt(inputValue);std::cout (爱看书的小沐)The square root of inputValue is outputValue std::endl;return 0; }执行如下命令 cmake --build . .\debug\Tutorial.exe生成文件TutorialConfig.h TutorialConfig.h 结语 如果您觉得该方法或代码有一点点用处可以给作者点个赞或打赏杯咖啡╮(▽)╭ 如果您感觉方法或代码不咋地//(ㄒoㄒ)//就在评论处留言作者继续改进o_O??? 如果您需要相关功能的代码定制化开发可以留言私信作者(✿◡‿◡) 感谢各位大佬童鞋们的支持( ´ ▽´ ) ( ´ ▽´)っ
http://www.dnsts.com.cn/news/146831.html

相关文章:

  • 上海公司做网站西安高端网站制作公司
  • 做网站的如何兼职常见的网站结构
  • 做第一个php网站整形网站整站源码
  • 新西兰网站开发专业贵州网架公司
  • 宁夏制作网站公司让网站打开更快
  • 正规货源网站大全vps安装wordpress
  • 台州网站关键字优化网站开发招聘职位
  • 自己做的网站图片挡住了导航栏做搬运的话哪个网站好
  • php源码项目门户网站开发建设部评职称查询网站
  • 云南省建设学校网站查指数
  • 东莞专业做网站建设服务新媒体营销概念
  • 网站是什么程序做的网络平台制作多少钱
  • 手机网站建站cms最热门的网络游戏排行
  • 自己做优惠劵网站赚钱吗网页音频提取工具
  • 连云港网站建设优化做网站办什么营业执照
  • 做茶叶网站优化大师怎么下载
  • 河北网站建设报价seo建站
  • 网站建设公司发展方向及趋势什么叫商业网站
  • 开发者软件下载小红书seo排名规则
  • 资源专业网站优化排名wordpress官方论坛
  • 个人网站建设第一步如何做简单的网站 域名邮箱
  • 如何网站网络营销是一种什么专业
  • 做网站代码保密协议wordpress设置注册观看
  • 怎么做后台网站一键更新佛山专业做网站的公司
  • 电子商务网站建设 教学大纲昆明网络营销
  • 阿里巴巴外贸网站论坛机关单位建设网站 说明
  • 黄江镇做网站祁阳做网站
  • 做公益选哪个网站好视频网站能备案吗
  • 中小型企业网站建设与推广公司网页设计说明300
  • 网站开发主流语言网络维护公司排名