cmake取消宏定义_CMake基本使用

本文简要介绍了CMakeLists.txt的编写,包括基本结构、子目录、依赖库、宏定义、设置变量、编译选项、条件生成、目标输出地址、安装目标和头文件,以及如何使用message命令调试和cmake命令参数。内容涵盖CMake的基本用法,有助于快速上手CMake构建项目。
摘要由CSDN通过智能技术生成

cmake是个很方便的构建系统。官方的文档写的很明白,就是有点长。于是,根据自己的使用情况,挑选其中最重要的,简要说明于下:

CMakeLists.txt的编写

CMakeLists.txt的命令不区分大小写。

基本结构

# 最低版本声明,如果本机的cmake版本小于这个,会告警

cmake_minimum_required(VERSION 3.10)

# set the project name

project(Tutorial)

# add the executable

add_executable(Tutorial tutorial.cxx)

# 生成库

# add_library( MyMath STATIC mymath.cpp)

注:add_executable和add_library可以源码列表,源码文件可以在后面通过target_sources添加。因为target_xxx_xxx的命令要求target先定义好,所以这一功能挺重要。

子目录

添加子目录前,需要先为子目录编写CMakeLists.txt。

add_subdirectory( MathFunctions )

依赖库

指定路径

link_directories(Tutorial "${PROJECT_SOURCE_DIR}/lib" )

注:link_directories只对在它后面声明的target有效。

指定库

target_link_libraries支持多种格式,以libopus.a为例

target_link_libraries(Tutorial opus)

target_link_libraries(Tutorial -lopus)

target_link_libraries(Tutorial libopus.a)

# 全路径

target_link_libraries(Tutorial ${PROJECT_SOURCE_DIR}/lib/libopus.a)

如果不是全路径模式,需要先指定路径。

注:target_link_libraries加入的顺序非常重要。比如Tutorial依赖libA.a, libA.a依赖libB.a。那么libA.a需要放在libB.a之前,不然会报错,说libB.a的符号找不到。据说是有一个选项,会尽量去掉没使用的符号。如果先写libB.a,则链接libB.a时发现没有人在使用它,就把它去掉了。不过是啥选项没研究,默认行为,还是注意下顺序吧。

宏定义

target_compile_definitions(foo PUBLIC FOO)

target_compile_definitions(foo PUBLIC -DFOO) # -D removed

target_compile_definitions(foo PUBLIC "" FOO) # "" ignored

target_compile_definitions(foo PUBLIC -D FOO) # -D becomes "", then ignored

#定义带值的

target_compile_definitions( Tutorial PRIVATE "LOG_LEVEL=2" )

设置变量

#直接设置

set(LIB_SRC src/mymath.cpp src/myadd.cpp ...)

#在原值后面增加

set(LIB_SRC "${LIB_SRC}" src/mymath.cpp src/myadd.cpp ...)

编译选项

#C,C++都启用的编译选项

add_compile_options(-Wall -Wextra -pedantic -Werror)

add_compile_options(-g)

#设置C编译选项

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Os -g)

#设置C++编译选项

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" -std=c++11 -Wall -Os -g)

条件生成

if(WIN32)

xxx

elseif(ANDROID)

xxx

elseif(IOS)

xxx

endif

target的生成地址

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR})

增加install

#安装target(lib/app)

install( TARGETS Tutorial DESTINATION bin)

#安装头文件

install( FILES ${PROJECT_BINARY_DIR}/config.h DESTINATION include )

有了这个以后,就可以用make install安装了

打印信息

写了CMakeLists.txt,却不能正常工作的时候,你一定想打印一些信息,看看到底是哪儿错了。于是message命令就派上了用场:

message("Build lib OK !")

message( "use_mymath:${USE_MYMATH}")

CMake命令

默认情况

cmake 源码目录

make

传递参数

-D表示设置变量

-U表示取消变量

cmake -DCMAKE_INSTALL_PREFIX=/opt/the/prefix

-UMyPackage_DIR

生成Xcode或者VS项目

#xcode项目

cmake ./src -GXcode

#VS项目

cmake ./src -G"Visual Studio 12 2013"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值