做建網(wǎng)站的工作一年賺幾百萬百度小說app下載
1.開發(fā)背景
? ? ? ? 基于上一篇的基礎(chǔ)上,已經(jīng)實(shí)現(xiàn)了多個(gè)源文件路徑調(diào)用,但是沒有庫的實(shí)現(xiàn)
2.開發(fā)需求
? ? ? ? 基于 cmake 的動態(tài)庫和靜態(tài)庫的調(diào)用
3.開發(fā)環(huán)境
? ? ? ? ubuntu 20.04 +?cmake-3.23.1
4.實(shí)現(xiàn)步驟
4.1 準(zhǔn)備源碼文件
基于上個(gè)試驗(yàn)的基礎(chǔ)上,增加了動態(tài)庫 LibShare 和 靜態(tài)庫 LibStatic
首先還是解析頂層的 CMakeLists.txt,指定了鏈接庫文件
# Top 頂層 Cmake
cmake_minimum_required(VERSION 2.8.11)# 添加子路徑 cmake 執(zhí)行調(diào)用對應(yīng)子路徑的 cmake
add_subdirectory(./src)
add_subdirectory(./src/func1)
add_subdirectory(./src/func2)
#add_subdirectory(./LibShare)
#add_subdirectory(./LibStatic)# 編譯過程打印信息
message("top cmake show message") # 打印信息
#message(SEND_ERROR "Error Show") # 打印錯(cuò)誤信息 可以顯示當(dāng)前位置行數(shù)# 定義工程名 暫時(shí)未見起作用
project(ProjectTop)# 指定編譯工具 X86 還是 ARM
#SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_CXX_COMPILER g++)# 指定生成的可執(zhí)行文件名
set(EXE_FILE_NAME mainFile)# 添加 include 包含路徑 否則在源代碼中引用頭文件需要指定完整路徑
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/src)
include_directories(${PROJECT_SOURCE_DIR}/src/func1)
include_directories(${PROJECT_SOURCE_DIR}/src/func2)# 添加 include 包含路徑 否則庫文件中引用頭文件需要指定完整路徑
include_directories(${PROJECT_SOURCE_DIR}/LibStatic)
include_directories(${PROJECT_SOURCE_DIR}/LibShare)# 添加源代碼路徑
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_DIR)
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_DIR)
aux_source_directory(${PROJECT_SOURCE_DIR}/src/func1 SRC_DIR)
aux_source_directory(${PROJECT_SOURCE_DIR}/src/func2 SRC_DIR)# 添加庫文件路徑 可以是動態(tài)庫或者靜態(tài)庫
link_directories(${PROJECT_SOURCE_DIR}/LibShare/build)
link_directories(${PROJECT_SOURCE_DIR}/LibStatic/build)# 添加執(zhí)行文件 1、多次調(diào)用 可以生成多個(gè)可執(zhí)行文件
add_executable(${EXE_FILE_NAME} ${SRC_DIR})
target_link_libraries(${EXE_FILE_NAME} -lShare) # 動態(tài)庫文件 libShare.so
target_link_libraries(${EXE_FILE_NAME} -lStatic) # 靜態(tài)庫文件 libStatic.a
LibShare CMakeLists.txt,主要是負(fù)責(zé)管理動態(tài)庫源文件
# LibShare Cmake
cmake_minimum_required(VERSION 2.8.11)# 編譯過程打印信息
message("lib share cmake show message") # 打印信息# 定義工程名 暫時(shí)未見起作用
project(ProjectLibShare)# 添加 include 包含路徑 否則在源代碼中引用頭文件需要指定完整路徑
include_directories(${PROJECT_SOURCE_DIR})add_library(Share SHARED LibShare.cpp)
LibStatic CMakeLists.txt,主要負(fù)責(zé)管理靜態(tài)庫源文件
# LibStatic Cmake
cmake_minimum_required(VERSION 2.8.11)# 編譯過程打印信息
message("lib static cmake show message") # 打印信息# 定義工程名 暫時(shí)未見起作用
project(ProjectLibStatic)# 添加 include 包含路徑 否則在源代碼中引用頭文件需要指定完整路徑
include_directories(${PROJECT_SOURCE_DIR})add_library(Static LibStatic.cpp)
最后介紹一下 main.cpp 文件
#include <stdio.h>#include "func1.h"
#include "func2.h"
#include "LibShare.h"
#include "LibStatic.h"int main(int argc, char* argv[])
{printf("%s hello cmake\r\n", __func__);/* 外調(diào)文件功能 */Func1_Test();Func2_Test();LibShare_Test();LibStatic_Test();return 0;
}
4.2 準(zhǔn)備編譯腳本
先編譯動態(tài)庫,再編譯可執(zhí)行文件
#!/bin/bashecho "compile file"if [ ! -d "./build/" ]; then# 沒有文件夾 創(chuàng)建文件夾echo "no build direct"mkdir buildelse# 存在文件夾 刪除文件夾內(nèi)容echo "already build direct"rm ./build/* -rficd ./LibShare && rm -r ./build/* && cmake -B ./build
cd ./build && make -j4
cd ../../cd ./LibStatic && rm -r ./build/* && cmake -B ./build
cd ./build && make -j4
cd ../../cmake -B ./build
cd ./build && make -j4
4.3 執(zhí)行編譯腳本
./compile.sh
4.4 運(yùn)行程序
./mainFile