一. 简介
前面一篇文章学习了 CMakeLists.txt语法中的 部分常量变量,具体学习提供信息的变量。
本文继续学习 CMakeLists.txt语法中:控制编译的变量。
二. CMakeLists.txt语法规则:控制编译的变量
这些变量可以控制编译过程,具体如下所示:
1. EXECUTABLE_OUTPUT_PATH 变量、LIBRARY_OUTPUT_PATH变量
这两个变量前面我们已经用到过了,分别用来设置可执行文件的输出目录以及库文件的输出目录,接下来我们进行简单地测试。
譬如工程目录结构如下所示:
hello.c
会被编译成动态库文件
libhello.so
,而
main.c
会被编译成可执行程序,
main.c
源码中调用了
hello.c 提供的函数;
顶层
CMakeLists.txt
文件内容如下所示:
# CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project(HELLO VERSION 1.1.0) #设置工程版本号为 1.1.0
# 设置可执行文件和库文件输出路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
# 头文件包含
include_directories(hello)
# 动态库目标
add_library(hello SHARED hello/hello.c)
# 可执行程序目标
add_executable(main main.c)
target_link_libraries(main PRIVATE hello) #链接库
进入到
build
目录下,执行 "
cmake .."命令
、
make命令
进行构建、编译,最终会生成可执行文件
main
和库文件
libhello.so
,目录结构如下所示:
这是因为我们通过设置
EXECUTABLE_OUTPUT_PATH
和
LIBRARY_OUTPUT_PATH
才会使得生成的可执行程序在
build/bin
目录下、生成的库文件在
build/lib
目录下。
如果把这两行给注释掉,那么生成的文件在 build 目录中。因为默认情况下,最终的目标文件的输出目录就是源码的 BINARY_DIR。