补充番外14:cmake实践项目笔记

本文详细介绍了CMake的安装步骤及在项目中的应用,包括单个和多个文件目录的编译、库文件生成、动态库与静态库的创建、安装路径定制以及调试版本和发布版本的编译。内容涵盖CMakeLists.txt的编写、目录结构设计以及不同编译选项的设置,为CMake初学者提供了全面的实践指导。
摘要由CSDN通过智能技术生成

一、安装cmake

1)卸载旧版本cmake

 apt-get autoremove cmake

2)文件下载解压:

https://cmake.org/files/v3.9/cmake-3.9.1-Linux-x86_64.tar.gz
tar zxvf cmake-3.9.1-Linux-x86_64.tar.gz

3)查看目录

 tree -L 2 cmake-3.9.1-Linux-x86_64
2 cmake-3.9.1-Linux-x86_64
3 ├── bin
4 │ ├── ccmake
5 │ ├── cmake
6 │ ├── cmake-gui
7 │ ├── cpack
8 │ └── ctest
9 ├── doc
10 │ └── cmake
11 ├── man
12 │ ├── man1
13 │ └── man7
14 └── share
15 ├── aclocal
16 ├── applications
17 ├── cmake-3.9
18 ├── icons
19 └── mime
20 12 directories, 5 files
4)创建软链接

注: 文件路径是可以指定的, 一般选择在 /opt 或 /usr 路径下, 这里选择 /opt

1 mv cmake-3.9.1-Linux-x86_64 /opt/cmake-3.9.1
2 ln -sf /opt/cmake-3.9.1/bin/* /usr/bin/

二、项目

1)单个文件目录实现

(1)基本工程
1 # 单个目录实现
2 # CMake 最低版本号要求
3 cmake_minimum_required (VERSION 2.8)

#指定工程名字,和二进制名字是可以不一样的,可以生成多个执行文件
PROJECT(0VOICE)

4 # 手动加填加文件
5 SET(SRC_LIST main.c)
SET(SRC_LIST2 main2.c)
6 MESSAGE(STATUS "THIS IS BINARY DIR " ${PROJECT_BINARY_DIR})
7 MESSAGE(STATUS "THIS IS SOURCE DIR " ${PROJECT_SOURCE_DIR})
8 ADD_EXECUTABLE(0voice ${SRC_LIST})    //执行文件叫0voice
ADD_EXECUTABLE(0voice2 ${SRC_LIST2})
(2)目录展现

cmakeLists.txt与main.c在同一目录

(3)代码

main.c

#include <stdio.h>
int main(int argc, char *argv[])
{
    printf("0voice2 CMake!!!\n");
    return 0;
}

main2.c

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("0voice CMake!!!\n");

    return 0;
}
(4)指令
cmake .    //.的位置表示的是cmakelists.txt的位置,配置好
make       //编译
./执行文件   //执行

2)改进工程结构

(1)基本工程
  • 指定安装目录

cmake -DCMAKE_INSTALL_PREFIX=/tmp/usr … (默认是安装到/usr/loacl/)

  • 主目录cmake


# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
PROJECT(0VOICE)

# 添加子目录
ADD_SUBDIRECTORY(src)

#INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/0voice)
# 安装doc到  share/doc/cmake/0voice目录
# 默认/usr/local/
#指定自定义目录,比如 cmake -DCMAKE_INSTALL_PREFIX=/tmp/usr ..
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/0voice)

在这里插入图片描述

  • src目录的cmake
# 单个目录实现
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 工程
# PROJECT(0VOICE)
# 手动加入文件
SET(SRC_LIST main.c)
MESSAGE(STATUS "THIS IS BINARY DIR " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "THIS IS SOURCE DIR " ${PROJECT_SOURCE_DIR})

ADD_EXECUTABLE(youzi ${SRC_LIST})

# 将执行文件安装到bin目录
# 默认/usr/local/
#指定自定义目录,比如 cmake -DCMAKE_INSTALL_PREFIX=/tmp/usr ..
INSTALL(TARGETS youzi RUNTIME DESTINATION bin)
(2)目录展现
1 .
2 ├── build
3 ├── CMakeLists.txt
4 ├── doc
5 │  ├── darren.txt
6 │  └── README.MD
7 └── src
8     ├── CMakeLists.txt
9     └── main.c
(3)代码

main.c

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("0voice CMake!!!\n");

    return 0;
}
(4)指令
cmake -DCMAKE_INSTALL_PREFIX=/tmp/usr .. 
make install
cd xxx
./执行文件

3)多个目录实践编译(库文件生成调用法)

(1)基本工程
(2)目录展现
  • 子目录编译成库文件
1 ├── CMakeLists.txt
2 ├── doc
3 │  ├── darren.txt
4 │  └── README.MD
5 └── src
6 ├── CMakeLists.txt
7 ├── dir1
8 │  ├── CMakeLists.txt
9 │  ├── dir1.c
10 │  └── dir1.h
11 ├── dir2
12 │  ├── CMakeLists.txt
13 │  ├── dir2.c
14 │  └── dir2.h
15 └── main.c
(3)代码
  • 最外cmake

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
PROJECT(0VOICE)

# 添加子目录
ADD_SUBDIRECTORY(src bin)

#INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/0voice)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/0voice)
  • src的cmake
# 单个目录实现
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 工程
PROJECT(0VOICE)
# 手动加入文件
SET(SRC_LIST main.c)
MESSAGE(STATUS "THIS IS BINARY DIR " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "THIS IS SOURCE DIR " ${PROJECT_SOURCE_DIR})

# 添加头文件路径
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/dir1")
INCLUDE_DIRECTORIES(dir1)  #这两种写法都可以
MESSAGE(STATUS "CMAKE_CURRENT_SOURCE_DIR -> " ${CMAKE_CURRENT_SOURCE_DIR})
# 添加 dir1 子目录
ADD_SUBDIRECTORY("${CMAKE_CURRENT_SOURCE_DIR}/dir1")
# 添加头文件路径
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/dir2")
# 添加 dir2 子目录
ADD_SUBDIRECTORY("${CMAKE_CURRENT_SOURCE_DIR}/dir2")

#定义了这个工程会生成一个文件名为[BINARY]可执行文件,相关的源文件是 SOURCE_LIST 中
定义的源文件列表
ADD_EXECUTABLE(darren ${SRC_LIST} )
#链接库到执行文件上
TARGET_LINK_LIBRARIES(darren dir1 dir2)


# 将执行文件安装到bin目录
INSTALL(TARGETS darren RUNTIME DESTINATION bin)
  • 子目录的cmake
# 加载所有的源码,和makefile wildcard类似,想当于SET (DIR_SRCS dir1.c)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
# SET(DIR_SRCS dir1.c  dir12.c)
# 默认是静态库,SHARED是生成动态库
ADD_LIBRARY (dir1 SHARED  ${DIR_SRCS})
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_LIBRARY (dir2 ${DIR_SRCS})
(4)指令
mkdir build
cd build
cmake ..
make

4)多个目录实践编译(遍历源文件并加载)

(1)基本工程
  • 主目录cmake
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
PROJECT(0VOICE)

ADD_SUBDIRECTORY(src bin)

MESSAGE(STATUS "TOP CMAKE_CURRENT_SOURCE_DIR -> " ${CMAKE_CURRENT_SOURCE_DIR})

#INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/0voice)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/0voice)
  • src的cmake
# 单个目录实现
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 工程
# PROJECT(0VOICE)
# 手动加入文件
SET(SRC_LIST main.c)
MESSAGE(STATUS "THIS IS BINARY DIR " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "THIS IS SOURCE DIR " ${PROJECT_SOURCE_DIR})

#设置子目录
set(SUB_DIR_LIST "${CMAKE_CURRENT_SOURCE_DIR}/dir1" "${CMAKE_CURRENT_SOURCE_DIR}/dir2")

foreach(SUB_DIR ${SUB_DIR_LIST})
    #遍历源文件
    aux_source_directory(${SUB_DIR} SRC_LIST)
    MESSAGE(STATUS "SUB_DIR-> " ${SUB_DIR})
    MESSAGE(STATUS "SRC_LIST-> " ${SRC_LIST})
endforeach()

# 添加头文件路径
INCLUDE_DIRECTORIES("dir1")
INCLUDE_DIRECTORIES("dir2")
(2)目录展现
1  . 
2  ├── CMakeLists.txt
3  ├── doc
4  │  ├── darren.txt
5  │  └── README.MD
6  └── src
7  ├── CMakeLists.txt
8  ├── dir1
9  │    ├── dir1.c
10 │    └── dir1.h
11 ├── dir2
12 │  ├── dir2.c
13 │  └── dir2.h
14 └── main.c
(3)代码
(4)指令
mkdir build
cd build
cmake ..
make

5)生成动态库

(1)基本工程
# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
    MESSAGE(STATUS "Release版本")
    SET(BuildType "Release")
else()
    SET(BuildType "Debug")
    MESSAGE(STATUS "Debug版本")
endif()

#设置lib库目录
#PROJECT_SOURCE_DIR 跟着最近工程的目录
SET(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
# debug和release版本目录不一样
#设置生成的so动态库最后输出的路径
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
ADD_COMPILE_OPTIONS(-fPIC)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)
# 生成静态库链接库Dir1
#ADD_LIBRARY (Dir1 ${DIR_LIB_SRCS})
# 生成动态库
ADD_LIBRARY (Dir1 SHARED  ${DIR_LIB_SRCS})
(2)目录展现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)代码
(4)指令
mkdir build
cd build
cmake  -DCMAKE_BUILD_TYPE=Debug ..  (编译debug版本,编译release版本就=Release)
make
  • 说明:
    debug版本会使用参数-g;
    release版本会使用-O3 -DNDEBUG

6)生成静态库+安装到指定目录

(1)基本工程
# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
    MESSAGE(STATUS "Release版本")
    SET(BuildType "Release")
else()
    SET(BuildType "Debug")
    MESSAGE(STATUS "Debug版本")
endif()

#设置lib库目录
SET(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
# debug和release版本目录不一样
#设置生成的so动态库最后输出的路径
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
ADD_COMPILE_OPTIONS(-fPIC)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
AUX_SOURCE_DIRECTORY(. DIR_LIB_SRCS)
# 生成静态库链接库Dir1
ADD_LIBRARY (Dir1 ${DIR_LIB_SRCS})
# 将库文件安装到lib目录
INSTALL(TARGETS Dir1 DESTINATION lib)
# 将头文件include
INSTALL(FILES dir1.h DESTINATION include) 
#INSTALL(FILES *.h DESTINATION include) 
(2)目录展现

在这里插入图片描述

(3)代码
(4)指令
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/tmp/usr .. 
make
make install
make  clean

在这里插入图片描述

7)调用静态库

(1)基本工程
# 单个目录实现
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 工程
PROJECT(0VOICE)
# 手动加入文件
SET(SRC_LIST main.c)
MESSAGE(STATUS "THIS IS BINARY DIR " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "THIS IS SOURCE DIR " ${PROJECT_SOURCE_DIR})

#包头文件
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/lib")

#指定库的路径
LINK_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/lib")

# 引用动态库
ADD_EXECUTABLE(darren  ${SRC_LIST})
#链接库文件
TARGET_LINK_LIBRARIES(darren Dir1)
(2)目录展现

在这里插入图片描述

(3)代码
(4)指令
跟6)一样

8)调用动态库

(1)基本工程
# 单个目录实现
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 工程
PROJECT(0VOICE)
# 手动加入文件
SET(SRC_LIST main.c)
MESSAGE(STATUS "THIS IS BINARY DIR " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "THIS IS SOURCE DIR " ${PROJECT_SOURCE_DIR})

INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/lib")

LINK_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/lib")
# 引用动态库
ADD_EXECUTABLE(darren  ${SRC_LIST})
# 优先连接动态库
#TARGET_LINK_LIBRARIES(darren Dir1)
# 强制使用静态库 完整的库文件名libDir1.a
TARGET_LINK_LIBRARIES(darren libDir1.a)
(2)目录展现(默认优先链接动态库,ldd daren去看)

在这里插入图片描述

(3)代码
(4)指令
cmake -DCMAKE_INSTALL_PREFIX=/tmp/usr ..
make install

9)编译debug版本release版本

(1)基本工程
  • 最外cmake
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
PROJECT(0VOICE)

ADD_SUBDIRECTORY(src bin)
#设置release目录
SET(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
#INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/0voice)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/0voice)
  • src的cmake
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)


# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
    message(STATUS "Release版本")
    set(BuildType "Release")
    MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
    MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FLAGS})
else()
    set(BuildType "Debug")
    message(STATUS "Debug版本")
    MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})  # 默认没有写参数
    MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FLAGS})
endif()

#设置生成的so动态库最后输出的路径
#设置bin和lib库目录
SET(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
#设置bin和lib库目录
# debug和release版本目录不一样
#LIBRARY_OUTPUT_PATH表示make之后,库放在哪个文件夹 
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
#   EXECUTABLE_OUTPUT_PATH表示执行文件生成在哪个目录 
SET(EXECUTABLE_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
add_compile_options(-fPIC)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加头文件路径
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/dir1")
# 添加 dir1 子目录
add_subdirectory(dir1)
# 添加头文件路径
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/dir2")
# 添加 dir2 子目录
add_subdirectory(dir2)


# 指定生成目标
add_executable(multi-dir main.c)
# 添加链接库
target_link_libraries(multi-dir Dir1 Dir2)
# 将执行文件安装到bin目录
INSTALL(TARGETS multi-dir RUNTIME DESTINATION bin)
  • dir1的cmake
# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
    message(STATUS "Release版本")
    set(BuildType "Release")
else()
    set(BuildType "Debug")
    message(STATUS "Debug版本")
endif()

#设置lib库目录
set(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
# debug和release版本目录不一样
#设置生成的so动态库最后输出的路径
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
add_compile_options(-fPIC)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库Dir1
#add_library (Dir1 ${DIR_LIB_SRCS})
# 生成动态库
add_library (Dir1 SHARED  ${DIR_LIB_SRCS})
# 将库文件安装到lib目录
INSTALL(TARGETS Dir1 DESTINATION lib)
# 将头文件include
INSTALL(FILES dir1.h DESTINATION include) 
(2)目录展现
1  .
2  ├── CMakeLists.txt
3  ├── doc
4  │  ├── darren.txt
5  │  └── README.md
6  ├── release
7  │  └── linux
8  │      ├── Debug
9  │      └── Release
10 └── src
11     ├── CMakeLists.txt
12     ├── dir1
13     │  ├── CMakeLists.txt
14     │  ├── dir1.c
15     │  └── dir1.h
16     ├── dir2
17     │  ├── CMakeLists.txt
18     │  ├── dir2.c
19     │  └── dir2.h
20     ├── main.c
21     ├── Makefile
22     ├── README.md
23     └── release
24         └── linux
(3)代码
(4)指令
编译debug版本
cmake -DCMAKE_INSTALL_PREFIX=/tmp/usr ..
make install

//
编译release版本
cmake -DCMAKE_BUILD_TYPE=Release ..  (debug版本就是=Debug)
mkdir build 
cd build
cmake ..

10)针对9)增加编译优化(设置flag)

(1)基本工程
  • 举例
    在这里插入图片描述
1 # 设置release版本还是debug版本
2 if(${CMAKE_BUILD_TYPE} MATCHES "Release")
3 message(STATUS "Release版本")
4 set(BuildType "Release")
5 SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -DNODEBUG -O3 -Wall")
6 SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -DNODEBUG -O3 -Wall")
7 MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
8 MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FLAGS})
9 else()
10 set(BuildType "Debug")
11 message(STATUS "Debug版本")
12 SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -Wall -O0 -g")
13 # SET(CMAKE_C_FILAGS "-O0 -g")
14 SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O0 -g")
15 MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
16 MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FILAGS})
17 endif()
1 #判断编译器类型,如果是gcc编译器,则在编译选项中加⼊c++11⽀持
2 if(CMAKE_COMPILER_IS_GNUCXX)
3 set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
4 message(STATUS "optional:-std=c++11")
5 endif(CMAKE_COMPILER_IS_GNUCXX)
  • 主cmake

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
PROJECT(0VOICE)

ADD_SUBDIRECTORY(src bin)
SET(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
#INSTALL(FILES COPYRIGHT README DESTINATION share/doc/cmake/0voice)
INSTALL(DIRECTORY doc/ DESTINATION share/doc/cmake/0voice)
  • src 的cmake
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)



# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
    message(STATUS "Release版本")
    set(BuildType "Release")
    SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -DNODEBUG -O3 -Wall")
    SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -DNODEBUG -O3 -Wall")
    MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
    MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FLAGS})
else()
    # CMAKE_BUILD_TYPE 不带参数就是debug版本
    set(BuildType "Debug")
    message(STATUS "Debug版本")
    SET(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -Wall  -O0 -g")
 #   SET(CMAKE_C_FILAGS "-O0 -g")
    SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O0 -g")
    MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
    MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FILAGS})
endif()



#设置生成的so动态库最后输出的路径
#设置bin和lib库目录
SET(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
#设置bin和lib库目录
# debug和release版本目录不一样
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
SET(EXECUTABLE_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
add_compile_options(-fPIC)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 添加头文件路径
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/dir1")
# 添加 dir1 子目录
add_subdirectory(dir1)
# 添加头文件路径
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/dir2")
# 添加 dir2 子目录
add_subdirectory(dir2)


# 指定生成目标
add_executable(multi-dir main.c)
# 添加链接库
target_link_libraries(multi-dir Dir1 Dir2)
# 将执行文件安装到bin目录
INSTALL(TARGETS multi-dir RUNTIME DESTINATION bin)
  • dir1的cmake
# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
    message(STATUS "Release版本")
    set(BuildType "Release")
else()
    set(BuildType "Debug")
    message(STATUS "Debug版本")
#SET(CMAKE_C_FILAGS "-O0 -g")
endif()

#设置lib库目录
set(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
# debug和release版本目录不一样
#设置生成的so动态库最后输出的路径
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
add_compile_options(-fPIC)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库Dir1
#add_library (Dir1 ${DIR_LIB_SRCS})
# 生成动态库
add_library (Dir1 SHARED  ${DIR_LIB_SRCS})
# 将库文件安装到lib目录
INSTALL(TARGETS Dir1 DESTINATION lib)
# 将头文件include
INSTALL(FILES dir1.h DESTINATION include) 
  • dir2的cmake
# 设置release版本还是debug版本
if(${CMAKE_BUILD_TYPE} MATCHES "Release")
    message(STATUS "Release版本")
    set(BuildType "Release")
    MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
    MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FLAGS})
else()
    set(BuildType "Debug")
    message(STATUS "Debug版本")
    MESSAGE(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS})
    MESSAGE(STATUS "CFLAGS: " ${CMAKE_C_FLAGS})
endif()

#设置lib库目录
set(RELEASE_DIR ${PROJECT_SOURCE_DIR}/release)
# debug和release版本目录不一样
#设置生成的so动态库最后输出的路径
SET(LIBRARY_OUTPUT_PATH ${RELEASE_DIR}/linux/${BuildType})
add_compile_options(-fPIC)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库Dir2
#add_library (libDir2.a STATIC  ${DIR_LIB_SRCS})
# 生成动态库
add_library (Dir2 SHARED  ${DIR_LIB_SRCS})
# 将库文件安装到lib目录
INSTALL(TARGETS Dir2 DESTINATION lib)
# 将头文件include
INSTALL(FILES dir2.h DESTINATION include) 
(2)目录展现
(3)代码
(4)指令
编译debug版本
cmake -DCMAKE_BUILD_TYPE=Debug ..


编译release版本
cmake -DCMAKE_BUILD_TYPE=Release ..

01 55 36

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值