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

广州电子商务网站建设爱站长工具综合查询

广州电子商务网站建设,爱站长工具综合查询,微信小程序卖货怎么注册,校园推广app1.什么是CMake Makefile想必大家都不陌生吧,它能够解决我们的自动化编译问题,大多是IDE软件都集成了make,譬如 Visual C的 nmake、linux 下的 GNU make、Qt 的 qmake 等等。 不同的IDE所集成的make工具所遵循的规范和标准都不同,也…

1.什么是CMake

        Makefile想必大家都不陌生吧,它能够解决我们的自动化编译问题,大多是IDE软件都集成了make,譬如 Visual C++的 nmake、linux 下的 GNU make、Qt 的 qmake 等等。

 不同的IDE所集成的make工具所遵循的规范和标准都不同,也就导致其语法、格式不同,也就不能很好的跨平台编译,会再次使得工作繁琐起来

        那么cmake为了解决这个问题而诞生了,其允许开发者指定整个工程的编译流程,在根据编译平台,生成本地化的Makefile和工程文件,最后用户只需make编译即可

        简而言之,可以把cmake看成一款自动生成 Makefile的工具,所以编译流程就变成了:cmake—>make–>用户代码–>可执行文件

2.CMakeflie的安装和版本的查看

首先我们需要安装我们的CMake

sudo yum install cmake

然后我们可以通过

cmake -version

 来查看自己的cmake的版本

3.几个简单示例 

事实上,cmake的用法特别简单

  1. 编写CMakeLists.txt
  2. 执行命令cmake .
  3. 执行命令make
  4. 运行执行程序

看几个例子来 

3.1.编译一个.cc文件

首先让我们从最简单的代码入手,先来体验下cmake是如何操作的。编写main.cc,如下,

#include <stdio.h>int main(void)
{printf("Hello World\n");return 0;
}

    然后在main.cc相同目录下编写CMakeLists.txt,内容如下,

    cmake_minimum_required (VERSION 2.8)project (demo)add_executable(main main.cc)
    • 第一行意思是表示cmake的最低版本要求是2.8,我们安装的是3.20.2;
    • 第二行是表示本工程信息,也就是工程名叫demo;
    • 第三行比较关键,表示最终要生成的elf文件的名字叫main,使用的源文件是main.cc

    在终端下切到main.cc所在的目录下,然后输入以下命令运行下面这个命令

    cmake .

    执行之后,就会有下面这样子的情况发生 

    我们再看看当前目录下面 

    我们发现当前目录下面有Makefile了,我们打开看看

    好像不认识啊 ,这个我们不管,我们退出来make一下 

    完美啊!

    3.2.编译一个.hpp文件和一个.cc文件

    接下来我将编译一个.hpp文件和一个.cc文件

    method.hpp

    #pragma once
    #include<iostream>void Printf()
    {std::cout<<"hello world!"<<std::endl;
    }

    main.cc 

    #include"method.hpp"int main()
    {Printf();
    }

     CMakeLists.txt

    cmake_minimum_required(VERSION 2.8)  project(demo)  # 添加可执行文件,只需要列出源文件,头文件不需要列出  
    add_executable(main main.cc)  #  method.hpp 是 main.cc 依赖的头文件,确保它位于正确的路径下  
    # CMake 会自动处理包含路径(如果设置了正确的包含目录)  
    # 如果需要,可以使用 include_directories 来指定头文件搜索路径  
    # include_directories(path/to/headers)  
    # 但头文件和源文件在同一目录下,通常不需要这样做

     我们执行

    cmake .

    完美!

     3.3.编译一个.hpp文件和两个.cc文件

    接下来进入稍微复杂的例子:这次我们决定编译一个.h文件和两个.cc文件

    method.hpp

    #pragma once#include<iostream>void Printf();

    method.cc 

    #include"method.hpp"void Printf()
    {std::cout<<"hello world"<<std::endl;
    }

     main.cc

    #include"method.hpp"int main()
    {Printf();
    }

    我们现在就来编写CMakeLists.txt

    CMakeLists.txt

    cmake_minimum_required (VERSION 2.8)project (demo)add_executable(main main.cc method.cc)

     

    注意我这里只是在main.cc后面加路method.cc 

    我们使用一下

    cmake .

     

    完美啊!! 

    3.4.编译两个.hpp文件和一个.cc文件

    接下来我们将使用method.hpp,way.hpp,main.cc文件来编译

    way.hpp 

    #pragma once
    #include<iostream>
    void Printf1()
    {std::cout<<"Printf1"<<std::endl;
    }

    method.hpp  

    #pragma once
    #include<iostream>
    void Printf2()
    {std::cout<<"Printf2"<<std::endl;
    }

    main.cc

    #include"way.hpp"
    #include"method.hpp"int main()
    {Printf1();Printf2();
    }

      CMakeLists.txt

    cmake_minimum_required (VERSION 2.8)project (demo)add_executable(main main.cc)

     

    注意:因为我这里只有一个源文件,所以我们写一个main.cc就好

    我们执行

    cmake .

    完美! 

    4.CMakeLists.txt

            编写CMakeLists.txt最常用的功能就是调用其他的.h头文件和.so/.a库文件,将.cpp/.c/.cc文件编译成可执行文件或者新的库文件。

    4.1.CMakeLists.txt常用的几条指令

    CMakeLists.txt 文件使用一系列的 CMake 指令来描述构建过程。常见的指令包括:

    1、指定 CMake 的最低版本要求:

    cmake_minimum_required(VERSION <version>)

    例如:

    cmake_minimum_required(VERSION 3.10)

    2、定义项目的名称和使用的编程语言:

    project(<project_name> [<language>...])

    例如:

    project(MyProject CXX)

     

    3、指定要生成的可执行文件和其源文件:

    add_executable(<target> <source_files>...)

    例如:

    add_executable(MyExecutable main.cpp other_file.cpp)

    4、创建一个库(静态库或动态库)及其源文件:

    add_library(<target> <source_files>...)

    例如:

    add_library(MyLibrary STATIC library.cpp)

    5、链接目标文件与其他库:

    target_link_libraries(<target> <libraries>...)

    例如:

    target_link_libraries(MyExecutable MyLibrary)

    6、添加头文件搜索路径:

    include_directories(<dirs>...)

    例如:

    include_directories(${PROJECT_SOURCE_DIR}/include)

    7、设置变量的值:

    set(<variable> <value>...)

    例如:

    set(CMAKE_CXX_STANDARD 11)

    8、设置目标属性:

    target_include_directories(TARGET target_name[BEFORE | AFTER][SYSTEM] [PUBLIC | PRIVATE | INTERFACE][items1...])

    例如:

    target_include_directories(MyExecutable PRIVATE ${PROJECT_SOURCE_DIR}/include)

    9、安装规则:

    install(TARGETS target1 [target2 ...][RUNTIME DESTINATION dir][LIBRARY DESTINATION dir][ARCHIVE DESTINATION dir][INCLUDES DESTINATION [dir ...]][PRIVATE_HEADER DESTINATION dir][PUBLIC_HEADER DESTINATION dir])

    例如:

    install(TARGETS MyExecutable RUNTIME DESTINATION bin)

    10、条件语句 (if, elseif, else, endif 命令)

    if(expression)# Commands
    elseif(expression)# Commands
    else()# Commands
    endif()

    例如:

    if(CMAKE_BUILD_TYPE STREQUAL "Debug")message("Debug build")
    endif()

    11、自定义命令 (add_custom_command 命令):

    add_custom_command(TARGET targetPRE_BUILD | PRE_LINK | POST_BUILDCOMMAND command1 [ARGS] [WORKING_DIRECTORY dir][COMMAND command2 [ARGS]][DEPENDS [depend1 [depend2 ...]]][COMMENT comment][VERBATIM]
    )

    例如:

    add_custom_command(TARGET MyExecutable POST_BUILDCOMMAND ${CMAKE_COMMAND} -E echo "Build completed."
    )

    实例

    一个简单的 CMakeLists.txt 文件示例:

    cmake_minimum_required(VERSION 3.10)
    project(MyProject CXX)# 添加源文件
    add_executable(MyExecutable main.cpp)# 设置 C++ 标准
    set(CMAKE_CXX_STANDARD 11)

    4.2.变量和缓存

    CMake 使用变量来存储和传递信息,这些变量可以在 CMakeLists.txt 文件中定义和使用。

    变量可以分为普通变量和缓存变量。

    4.2.1.变量定义与使用

    定义变量:

    set(MY_VAR "Hello World")

    使用变量:

    message(STATUS "Variable MY_VAR is ${MY_VAR}")
    4.2.2.缓存变量

    缓存变量存储在 CMake 的缓存文件中,用户可以在 CMake 配置时修改这些值。缓存变量通常用于用户输入的设置,例如编译选项和路径。

    定义缓存变量:

    set(MY_CACHE_VAR "DefaultValue" CACHE STRING "A cache variable")

    使用缓存变量:

    message(STATUS "Cache variable MY_CACHE_VAR is ${MY_CACHE_VAR}")

     

    4.3.查找库和包

    CMake 可以通过 find_package() 指令自动检测和配置外部库和包。

    常用于查找系统安装的库或第三方库。

    4.3.1.find_package() 指令

    基本用法:

    find_package(Boost REQUIRED)

    指定版本:

    使用查找到的库:

    target_link_libraries(MyExecutable Boost::Boost)

    设置包含目录和链接目录:

    include_directories(${Boost_INCLUDE_DIRS})
    link_directories(${Boost_LIBRARY_DIRS})
    4.3.2.使用第三方库

    假设你想在项目中使用 Boost 库,CMakeLists.txt 文件可能如下所示:

    实例

    cmake_minimum_required(VERSION 3.10)
    project(MyProject CXX)# 查找 Boost 库
    find_package(Boost REQUIRED)# 添加源文件
    add_executable(MyExecutable main.cpp)# 链接 Boost 库
    target_link_libraries(MyExecutable Boost::Boost)

    通过上述内容,用户可以了解 CMakeLists.txt 文件的基本结构和常用指令,掌握如何定义和使用变量,查找和配置外部库,从而能够有效地使用 CMake 管理项目构建过程。

    http://www.dtcms.com/wzjs/426293.html

    相关文章:

  1. 吧网站做软件的软件少儿编程
  2. 橙子建站官网联系电话如何提交百度收录
  3. 室内设计师网上接单seo优化标题 关键词
  4. 成品网站货源1277seo推广公司价格
  5. 网站运营做的是什么工作创建网站教程
  6. 网络营销优化推广seo需要掌握什么技能
  7. 企业文化理念凤山网站seo
  8. 动物大联盟小程序海外广告优化师
  9. wordpress get_categories depth厦门网站seo
  10. 做同城网站有哪些企业网络营销推广平台
  11. 豪柏大厦做网站的公司福州百度seo排名
  12. 建设网站必备的开发工具西安网站设计
  13. 吴忠市住房和城乡建设局网站qq刷赞网站推广
  14. ppt制作网站2023推广平台
  15. udacity 移动网站开发整站seo优化公司
  16. 网站 架构设计百度推广方式有哪些
  17. 飞色网站商城怎么做网站宣传文案范例
  18. 网站配置域名这样做夸克浏览器网页版入口
  19. 做网站 网上接单域名解析查询站长工具
  20. 做网站市场分析seo属于技术还是营销
  21. 卖掉的网站了对方用来做违法站长之家网站排名
  22. 网站模版与模板的使用域名注册商
  23. 绵阳网站建设报价网站建设合同模板
  24. 网站建设的技术方案扬州网站seo
  25. 没有病毒的软件下载网站一个新手怎么去运营淘宝店铺
  26. 移动互联网开发实验报告seo公司厦门
  27. 动态网站静态化海南百度推广电话
  28. 企业网站建设与维护成都百度推广账户优化
  29. 有没有什么网站专门帮人做问卷推广方案100个
  30. 固安建设局网站百度推广关键词查询