CMAKE 简单介绍

利用cmake构建项目

主要命令介绍

1.cmake_minimum_required

cmake_minimum_required()命令用来指定cmake最低(高)版本,低于设定版本会报错。设定的最高版本只会影响策略机制其他正常。

#设置最低版本为3.8
cmake_minimum_required (VERSION 3.8)
#设置最低版本为3.12.2最高为3.16.2(最高只影响策略机制)
cmake_minimum_required (VERSION 3.12.2...3.16.2)

2.option

option(OPTION “arm or X86” ON)命令用来申请一个名为OPTION的bool变量,只有在设定值为ON时为1其余任何值均为0。执行cmake命令后会缓存在CMakeCache.txt文件内。之后修改变量值不会生效需使用set(OPTION OFF CACHE BOOL “arm or X86” FORCE)才能修改CMakeCache.txt文件内的值

#申请一个BOOL变量,cmake不传递值的情况下为OFF
option(OPTION  "arm or X86" ON)
#修改option设定值方法必须修改CMakeCache.txt内的缓存
set(OPTION OFF CACHE BOOL "arm or X86" FORCE)

3.set

set()命令用来申请变量并存储值。如set(VERSIONT “SV1.010”)申请名为VERSIONT的变量其值为"SV1.010"。

申请一个字符串变量,并赋值为"SV1.010"。
set(VERSIONT "SV1.010")

4.message

message()命令用来打印输出类似echo,printf。如message("版本为 V E R S I O N T " ) 打 印 “ 版 本 为 S V 1.010 ” 其 中 变 量 使 用 {VERSIONT}")打印“版本为 SV1.010”其中变量使用 VERSIONT")SV1.010使{变量}获取。

#输出版本信息
message("版本为  ${VERSIONT}")

5.EXECUTE_PROCESS

EXECUTE_PROCESS()命令为执行一条或多条命令。如EXECUTE_PROCESS( COMMAND ls -ll OUTPUT_VARIABLE BUILDTIMESS)为在当前目录下执行ls -ll命令并将输出结果存放在BUILDTIMESS变量里。

#获取当前目录信息
EXECUTE_PROCESS( COMMAND ls -ll OUTPUT_VARIABLE BUILDTIMESS)

6.if

if()…else()…endif()为逻辑判断命令。

if(OPTION)
  message("OPTION 值为 ON")
else()
   message("OPTION 值为 OFF")
endif()

7.configure_file

configure_file(“${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.in”

“${CMAKE_CURRENT_SOURCE_DIR}/include/config.h”)

将config.h.in文件输出为config.h文件其宏定义值为CMakeLists.txt的设定值

.in文件
#设置一个为字符串的宏定义
#define TIMES "@TIMES@"
#设置一个宏定义,其值由变量决定
#define VERSIONTYPE "@VERSIONTYPE@"
#设定一个BOOL类型的宏定义,设置非OFF的任意值都为1,不设置或设置OFF为0
#cmakedefine01 LOGSTAT

CMakeLists.txt文件设置

set(VERSIONTYPE "\"SV1.010\"") 
set(TIMES "2022-05-05 22:42:47")
设置非OFF的任意值都为1,不设置或设置OFF为0
set(LOGSTAT ON)

configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.in"  
"${CMAKE_CURRENT_SOURCE_DIR}/include/config.h")

.h文件
#define TIMES "2022-05-05 22:42:47"
#define VERSIONTYPE "SV1.010"
#define LOGSTAT 1

8.环境变量设置

# 设置交叉编译工具
set(CMAKE_C_COMPILER /home/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER /home/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++)

#设置可执行文件输出目录
SET(EXECUTABLE_OUTPUT_PATH /tmp/share)

#设置库文件生成输出目录
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/arm)

# 添加链接库查找目录
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib/arm /lib)

#  添加头文件目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/BSform)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/BSmenu)

#编译添加debug选项
SET(CMAKE_BUILD_TYPE "Debug") 
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -std=c++11") 

# 添加cmake子目录
add_subdirectory(BSform)
add_subdirectory(BSmenu)
add_subdirectory(ncurse)

主CMakeLists.txt构建

#设置cmake版本不低于3.8
cmake_minimum_required (VERSION 3.8)

#交叉编译设定
option(OPTION  "arm or X86" ON)
#修改option设定值方法必须修改CMakeCache.txt内的缓存
set(OPTION OFF CACHE BOOL "arm or X86" FORCE)

#编译使用的语言库
option( LANGUAGE "中文 or 英文" ON)
set(LANGUAGE OFF CACHE BOOL "中文 or 英文" FORCE)

设置程序版本
set(VERSIONTYPE "SV1.010")

message("程序版本为 ${VERSIONTYPE}")

#是否打开log日志设非OFF值为1否则为0
set(LOGSTAT ON)

#设置可执行文件输出目录
SET(EXECUTABLE_OUTPUT_PATH /tmp/share)

#交叉编译
if(OPTION)
  message( "使用ARM编译")
  # 设置交叉编译工具
  set(CMAKE_C_COMPILER /home/bin/arm-linux-gnueabihf-gcc)
  set(CMAKE_CXX_COMPILER /home/bin/arm-linux-gnueabihf-g++)
  
  # 设置库生成库目录
  set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/arm)
  # 添加链接库查找目录
  link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib/arm)
else()
  message("使用X86编译")
  
  set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib/x86)
  link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib/x86 /user/lib)
  
endif()

#将宏定义写入头文件
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/include/config.h.in"  "${CMAKE_CURRENT_SOURCE_DIR}/include/config.h")

#编译添加debug选项
SET(CMAKE_BUILD_TYPE "Debug") 
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -std=c++11") 

#设置项目名称,需设置在编译信息之后
project(TEST)

#添加头文件目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/BSform)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/BSmenu)


# 添加cmake子目录
add_subdirectory(BSform)
add_subdirectory(BSmenu)
add_subdirectory(ncurse)

子目录CMakeLists.txt

main函数所在目录

set(targetName "Ncurse") 

# 项目信息 注意:需要在设置编译工具之后
project(${targetName} )

# 将源代码添加到此项目的可执行文件。
add_executable (${targetName} "main.cpp" )

# 添加编译子目录
  target_link_libraries(${targetName} BSform)
  target_link_libraries(${targetName} BSmenu)
  
if(LANGUAGE)
  target_link_libraries(${targetName} menuw)
  target_link_libraries(${targetName} formw)
  target_link_libraries(${targetName} panelw)
  target_link_libraries(${targetName} ncursesw)

else()
  target_link_libraries(${targetName} menu)
  target_link_libraries(${targetName} form)
  target_link_libraries(${targetName} panel)
  target_link_libraries(${targetName} ncurses)
endif()

其余

project(BSform)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
#add_executable(Demo ${DIR_SRCS})

#指定生成的库为静态链接库
add_library(BSform STATIC ${DIR_SRCS})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值