CMake纯学习记录笔记

附加包含目录

  • 函数
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
  • 使用示例
include_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_SOURCE_DIR}/../../include/
        ${CMAKE_CURRENT_SOURCE_DIR}/../widget/
        ${CMAKE_CURRENT_SOURCE_DIR}/../ui_base/)

${CMAKE_CURRENT_SOURCE_DIR}表示当前CMakeLists.txt所在目录,实例中所描述的目录层级如下所示:

|--root
	|--source
		|--login_module
			|--CMakeLists.txt
		|--widget
			|--........
		|--ui_base
			|--........
	|--include
		|--login_module
		|--........

这里需要注意的是include_directories命令不包含子目录,例如,引用include目录下的login_module文件夹中的声明文件时,就需要指定login_module,示例如下:

#include "login_module/ILoginService.h"

文件操作

可以使用file命令在编译时对文件进行读写操作,这里目前只是用GLOB将某个目录下的源码文件全部获取,生成一个list,编译时通过变量传给add_executable或者add_library而不用一个一个将源码写在上述两个函数中的参数中。

  • 函数
file(GLOB <variable>
     [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
     [<globbing-expressions>...])
  • 使用示例
# 获取某个目录下的全部文件
file(GLOB login_module_src ./*
           widget_src ./../widget/*)
           
# 使用结果
add_library(LoginModule SHARED
        ${widget_src}
        ${login_module_src})

这个函数的默认路径也是当前CMakeLists.txt文件所在目录。

指定编码设置

  • 函数
add_compile_options(<option> ...)
  • 使用示例
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

在使用MSVC编译器时可以使用这个设置,其他环境下未知。

设置预定义

  • 函数
add_definitions(-DFOO -DBAR ...)
  • 使用示例
add_definitions(-DDATABASE_MODULE_LIB)

定一个DATABASE_MODULE_LIB宏。

编译成可执行文件

  • 函数
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               [source1] [source2 ...])
  • 使用示例
add_executable(TJAnalysis
        main.cpp)

设置可执行文件输出目录

  • 函数
set(<variable> <value>... [PARENT_SCOPE])
  • 使用示例
set(EXECUTABLE_OUTPUT_PATH  ${CMAKE_CURRENT_SOURCE_DIR}/../../x64_debug/)

编译成库文件

  • 函数
add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [<source>...])
  • 使用示例
add_library(DatabaseModule SHARED
            ${database_module_src}
)

其中使用SHARED表示动态库,使用STATIC表示静态库。

设置库文件输出目录

  • 函数
set(<variable> <value>... [PARENT_SCOPE])
  • 使用示例
set(LIBRARY_OUTPUT_PATH  ${CMAKE_CURRENT_SOURCE_DIR}/../../x64_debug/)

添加编译子模块路径

  • 函数
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL] [SYSTEM])
  • 使用实例
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/source/login_module)

注意,添加的路径文件夹下边一定要一个CMakeLists.txt文件,上述示例中文件的对应关系如下所示:

|--root
	|--source
		|--login_module
			|--CMakeLists.txt
			|--........
	|--CMakeLists.txt		# 示例文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值