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

[工程构建] 使用 pkg-config 的 cmake 模板

可执行文件

# 1) cmake basic
cmake_minimum_required(VERSION 3.12) #cmake version check
set(CXX_STANDARD 17) #c++ standard version)



# 2) project info
#auto generated variables as below:
#PROJECT_NAME: "hello"
#hello_BINARY_DIR: build root dir
#hello_SOURCE_DIR: source root dir
project(hello LANGUAGES C CXX)  #project name
message("build root dir: ${hello_BINARY_DIR}")
message("source root dir: ${hello_SOURCE_DIR}")



# 3) specify source files and create target
#SOURCE_FILES: all c cpp and hpp as source file
file(GLOB_RECURSE SOURCE_FILES  #glob all source files(c cpp hpp , h is excluded)
    ${hello_SOURCE_DIR}/*.c
    ${hello_SOURCE_DIR}/*.cpp
    ${hello_SOURCE_DIR}/*.hpp
)
list(FILTER SOURCE_FILES EXCLUDE REGEX "CMakeFiles/*")   #exclude cmake files from source list
message("source files: ${SOURCE_FILES}")
add_executable(${PROJECT_NAME} ${SOURCE_FILES}) #add executable file



# 4) package dependency (pkg-config)
find_package(PkgConfig REQUIRED)

#GTK_INCLUDE_DIRS : HEADER SERARCH PATHS
#GTK_LIBRARIES : LIBRARY NAME
#GTK_LIBRARY_DIRS : LIBRARY PATHS
pkg_check_modules(GTK REQUIRED gtk+-3.0)



# 5) include and link
include_directories(                    #head search path
    ${GTK_INCLUDE_DIRS}
)
link_directories(                      #library search path 
    ${GTK_LIBRARY_DIRS}
)
target_link_libraries(${PROJECT_NAME}   #what libraries needs to link
    ${GTK_LIBRARIES}
)



# 6) ADD_DEFINITIONS
ADD_DEFINITIONS(-D LINUX)



# 7) install
#install ${PROJECT_NAME} to ~/bin
set(INSTALL_PATH ~/bin)
install(
    TARGETS ${PROJECT_NAME} 
    DESTINATION ${INSTALL_PATH}
)
#install config file to ~/bin
set(INSTALL_PATH ~/bin)
file(GLOB_RECURSE CONFIG_FILES 
    ${hello_SOURCE_DIR}/*.ui
    ${hello_SOURCE_DIR}/*.ini
    ${hello_SOURCE_DIR}/*.conf
)
install(
    FILES ${CONFIG_FILES}
    DESTINATION ${INSTALL_PATH}
)



动态库


http://www.kler.cn/news/356189.html

相关文章:

  • laravel-admin后台子账号菜单配置详解
  • ant-design-vue 时间选择器 a-date-picker 单组件设置国际化失效问题解决
  • 网数中心举办CISAW安全软件教师培训 助力国家网络安全战略
  • 众数信科荣登“2024 CHINA AIGC 100”榜单
  • 如何修改网络ip地址:一步步指南‌
  • 【C语言】sizeof和strlen的区别
  • 【C语言】指针与函数:传值与传址
  • 【汇编语言】寄存器(内存访问)(六)—— 栈
  • k8s 1.28.2 集群部署 harbor v2.11.1 接入 MinIO 对象存储
  • Linux文件操作基础
  • [LeetCode] 127. 单词接龙
  • Django中如何实现用户认证和会话管理
  • ThreadLocal线程局部变量
  • 《柬埔寨语翻译通》App是如何实现高棉语语音识别翻译技术的,高精度OCR文字识别技术分享!
  • IO多路复用:select、poll、epoll的底层区别
  • 003 Qt_信号和槽-上
  • FPGA图像处理之均值滤波
  • react子应用嵌入qiankun微前端后,多层抽屉drawer getContainer={false}挂载在当前位置后抽屉不在停靠在窗口的最边上
  • HarmonyOS NEXT开发之ArkTS自定义组件学习笔记
  • 全桥LLC谐振变换器概述及MATLAB仿真