CMake入门使用(三)动态库、静态库的编译及使用

来源:互联网 发布:网络视频节目许可证 编辑:程序博客网 时间:2024/06/03 17:53

一、动态库、静态库的编译

首先新建个CMakeLists.txt

敲入

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)ADD_SUBDIRECTORY(src/shared)ADD_SUBDIRECTORY(src/static)

然后在项目目录下创建src文件夹,在src下再创建shared和static文件夹

动态库

在src/shared下创建include、src、CMakeLists.txt
include下创建头文件shared.h

#include <iostream>void sayShared();

src下创建shared.h的实现shared.cpp

#include <shared.h>void sayShared(){    std::cout << "Shared!" << std::endl;}

然后在CMakeLists.txt下敲入

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)SET(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib")AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/shared/src SHARED_SRC)INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/src/shared/include")ADD_LIBRARY(shared SHARED ${SHARED_SRC})

静态库

在src/static下创建include、src、CMakeLists.txt
include下创建头文件static.h

#include <iostream>void sayStatic();

src下创建static.h的实现static.cpp

#include <static.h>void sayStatic(){    std::cout << "Static!" << std::endl;}

然后在CMakeLists.txt下敲入

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)SET(LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/lib")AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/src/static/src STATIC_SRC)INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/src/static/include")ADD_LIBRARY(static STATIC ${STATIC_SRC})

新建脚本build.sh

#!/bin/bashdir="./build"[ -d "$dir" ] && rm -rf "$dir"mkdir "$dir"cd "$dir"cmake ..make

准备工作做完了,目录如下
这里写图片描述
然后运行

./build.sh

就可以编译动、静态库
这里写图片描述
在build/lib下就会出现编译好的库文件

二、动、静态库的使用

对上述工程做个改动即可
修改根目录下的CMakeLists.txt,添加使用的目录

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)ADD_SUBDIRECTORY(src/shared)ADD_SUBDIRECTORY(src/static)ADD_SUBDIRECTORY(example)

新建example,example下创建CMakeLists.txt和main.cpp
CMakeLists.txt敲入

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)SET(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/bin")AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/example MAIN_SRC)INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/src/shared/include")INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/src/static/include")LINK_DIRECTORIES("${PROJECT_BINARY_DIR}/lib")ADD_EXECUTABLE(hello ${MAIN_SRC})TARGET_LINK_LIBRARIES(hello libshared.so)TARGET_LINK_LIBRARIES(hello libstatic.a)

main.cpp敲入

#include <shared.h>#include <static.h>int main(){    sayShared();    sayStatic();    return 0;}

文件目录如下图所示
这里写图片描述
然后运行编译脚本

./build.sh

执行bin下的hello就ok了
这里写图片描述

完整工程上传至git上https://github.com/fujikoli/CMakeExamples

阅读全文
0 0
原创粉丝点击