CMakeList使用总结

CMakeList使用总结一 cmake 功能介绍 cmake 是跨平台编译工具 编写简单好维护 是 make 的高级用法 1 编写 CMakeList txt 文件 通过 cmake 生成 Makefile 文件 make 生成可执行文件 静态库 共享库 2 cmake 是一个跨平台的编译工具 可以用简单的语句来描述所有平台编译 make 工具依赖于平台 GNUmake Qtqmake MSnmake BSDpmake makepp 等等 这些不同 make 工具遵循不同的规范标准 所有执行的 Makefile 文件格式格式不同 在线帮助文档 http

一、cmake功能介绍

二、CMakeLists编写介绍

$ENV{ 
   系统变量} $ENV{ 
   PATH} 

5.指定可执行文件生成路径:

SET(EXECUTABLE_OUTPUT_PATH "xxx/bin") 

6.指定输出动态库的目录位置:

SET(LIBRARY_OUTPUT_PATH "xxx/lib") 

7.获取源代码、头文件路径:

FILE(GLOB SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp") FILE(GLOB HEAD_LIST "${PROJECT_SOURCE_DIR}/include/*.h") 

8.添加头文件路径:

include_directories("${PROJECT_SOURCE_DIR}/include") 

9.添加链接库路径:

link_directories("${PROJECT_SOURCE_DIR}/lib") 

10.添加生成可执行文件:

add_executable(${PROJECT_NAME} ${SRC_LIST} ${HEAD_LIST}) 

11.链接库名:

target_link_libraries(${PROJECT_NAME} ${LIB_NAME}) 

12.添加生成动态库或静态库: 不写默认静态库

add_library(${LIB_NAME} SHARED ${PROJECT_SOURCE_DIR}/third/test.cpp) add_library(${LIB_NAME}_static STATIC ${PROJECT_SOURCE_DIR}/third/test.cpp) 

13.静态库的输出名称:

set_target_properties(${LIB_NAME}_static PROPERTIES OUTPUT_NAME ${LIB_NAME}) 

14.设置预处理宏开关 开启:

option(USE_TEST "option for test" ON) 

15.配置一个头文件用于传递一些CMake中的配置到源代码中

configure_file("${PROJECT_SOURCE_DIR}/config.in" "${PROJECT_SOURCE_DIR}/config.h") 
 install(TARGETS myrun mylib mystaticlib RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) 

16.2安装整个目录

 install(DIRECTORY ${OUT_PATH} DESTINATION ${PROJECT_SOURCE_DIR}) install(DIRECTORY ${OUT_PATH} DESTINATION ${PROJECT_SOURCE_DIR} PATTERN "${EXE_NAME}" PERMISSIONS OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ) 

16.3安装文件

 install(FILES "${PROJECT_BINARY_DIR}/bin/${EXE_NAME}" DESTINATION "${PROJECT_SOURCE_DIR}/bin" PATTERN "${EXE_NAME}" PERMISSIONS OWNER_EXECUTE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ) install(FILES "${PROJECT_BINARY_DIR}/lib/lib${LIB_NAME}.a" DESTINATION "${PROJECT_SOURCE_DIR}/lib") install(FILES "${PROJECT_BINARY_DIR}/lib/lib${LIB_NAME}.so" DESTINATION "${PROJECT_SOURCE_DIR}/lib") 

三、CMakeList构建Qt工程

1.设置开启MOC UIC RCC编译器

set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") 

2.添加qt模块 添加头文件路径 依赖库路径 库名称 Findxxx.cmake xxxConfig.cmake

find_package(Qt5Widgets CONFIG REQUIRED) target_link_libraries(${ 
   PROJECT_NAME} Qt5::Widgets) <NAME>_FOUND <NAME>_INCLUDE_DIRS or <NAME>_INCLUDES <NAME>_LIBRARIE or <NAME>_LIBRARIES or <NAME>_LIBS <NAME>_DEFINITIONS =================================== find_package(PkgConfig) pkg_search_module(Qt5Widgets REQUIRED Qt5Widgets) target_link_libraries(${ 
   PROJECT_NAME} ${ 
   Qt5Widgets_LIBRARIES}) ===================================================== (pkg-config xxx a.默认usr/bin/*.pc b.读取环境变量PKG_CONFIG_PATH c.pkg-config --variable pc_path pkg-config ) (动态库 a.LD_LIBRARY_PATH b./etc/ld.so.conf c./lib or /usr/lib) 

四、CMakeList添加第三方库

1.编写编译安装脚本 命名为uchartdet_install.sh

cd libiconv-1.16 path=”`pwd`/../lib” #生成路径自己指定 ./configure --enable-extra-encodings --prefix=$path --enable-static --disable-shared make make install 

2.在第三方库third目录下编写CMakeList.txt

execute_process(COMMAND bash "${CMAKE_CURRENT_SOURCE_DIR}/uchartdet_install.sh" WORKING_DIRECTORY ${ 
   CMAKE_CURRENT_SOURCE_DIR}) 

3.在上级CMakeList.txt添加add_subdirectory(third)

相关demo文档下载:https://download.csdn.net/download/wml00876/

简单demo

#最低cmake版本 cmake_minimum_required(VERSION 3.0) #项目名 project(aqp) #引入文件 file(GLOB HEADS "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp") file(GLOB SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.qrc") #添加Qt模块 find_package(Qt5Core REQUIRED) find_package(Qt5Widgets REQUIRED) #创建可执行文件 add_executable(aqp ${ 
   HEADS} ${ 
   SRCS} ) #引用路径,包含编译给定目标时需要使用的目录 target_include_directories(${ 
   PROJECT_NAME} PUBLIC ${ 
   Qt5Core_INCLUDE_DIRS} ${ 
   Qt5Widgets_INCLUDE_DIRS} ) 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229994.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:22
下一篇 2026年3月16日 下午3:23


相关推荐

  • Surging -Demo部署

    Surging -Demo部署1 安装 rabbitmqdock dnamerabbitm unless stoppedpubli 5671publish5 5672publish4 4369publish2 25672publish 15671publish 15672 nbsp rabb

    2026年3月19日
    2
  • pycharm安装教程CSDN_java遇到解决不了的问题

    pycharm安装教程CSDN_java遇到解决不了的问题第三周开始接触python了,结果第一步装pycharm时就遇到了坑,正常安装完成后点运行时出现错误——NoJVMinstallationfound。助教说这是缺少jdk(java程序支持包),需要在网上找个最新的安装并配置下path路径。唉,编程小白,完全不知道这都是些啥o(╥﹏╥)o,于是开始了百度解决问题之路……运行pycharm错误——NoJVMinstallationfoun…

    2022年8月26日
    14
  • dpdk 性能_第二系列什么意思

    dpdk 性能_第二系列什么意思首先,DPDK和内核网络协议栈不是对等的概念。DPDK只是单纯的从驱动拿数据,然后组织成数据块给人用,跑在用户态。功能相当于linux的设备无关接口层,处于socket之下,驱动之上。只不过linux协议栈的这部分在核心态。你说的包处理器,很多时候是不用linux内核协议栈的,而是用专用包处理程序,类似于DPDK加上层应用处理。通常会有些硬件加速器,包处理效率更高些。缺点是一旦用不上某些功能

    2026年1月30日
    3
  • oracle教程15 PlSql入门和基本用法举例(很齐全)

    oracle教程15 PlSql入门和基本用法举例(很齐全)无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。PLSQL的简介PLSQL的语法结构例子:SETSERVEROUTPUTONBEGIN –打印输出DBMS_OUTPUT.PUT_LINE(‘hel…

    2022年6月5日
    219
  • java urlencoder,java中的URLEncoder和URLDecoder类「建议收藏」

    java urlencoder,java中的URLEncoder和URLDecoder类「建议收藏」java中的URLEncoder和URLDecoder类URLEncoder类包含将字符串转换为application/x-www-form-urlencodedMIME格式的静态方法。为了解决web设计中不同操作系统间的差异性,我们在URL中使用的字符就必须是一个ASCII字符集的固定字集中的元素,具体如下:1.大写字母A-Z2.小写字母a-z3.数字0-94.标点符-_.!~…

    2022年6月26日
    43
  • Java 零拷贝_java clone 深拷贝

    Java 零拷贝_java clone 深拷贝Java零拷贝参考:Java中的零拷贝零拷贝(英语:Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上:下文切换而带来的开销传统的IO数据读写如下的例子,Java传统IO和网络编程的一段代码Fi

    2026年2月6日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号