CMake编译静态、动态库,并使用外部共享库

文章目录

  • 编译静态,动态库
    • 文件目录结构
    • 文件内容
    • 外部构建生成库文件
  • 使用外部共享库
    • 文件目录结构
    • 文件内容
    • 外部构建与运行

编译静态,动态库

文件目录结构

CMake编译静态、动态库,并使用外部共享库_第1张图片

文件内容

hello.h

#ifndef HELLO 
#define HELLO
void HelloFunc();
#endif

hello.cpp

#include "hello.h"
#include
void HelloFunc()
{
    std::cout<<"hello,world"<<std::endl;
}

cmake02/CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

PROJECT(MAIN)

ADD_SUBDIRECTORY(lib bin)

cmake02/lib/CMakeLists.txt

SET(LIBHELLO_SRC hello.cpp)

#构建动态库/静态库
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})

SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")

#安装头文件
INSTALL(FILES hello.h DESTINATION include/hello)
#安装静态库和动态库,注意lib都为相对路径,动态库需要安装在lib64下面
#安装的时候指定路径,放到系统下  cmake -D CMAKE_INSTALL_PREFIX=/usr ..

INSTALL(TARGETS hello hello_static LIBRARY DESTINATION lib64 ARCHIVE DESTINATION lib)

#最后make install进行静态库和动态库的安装

#使用外部共享库和头文件

外部构建生成库文件

cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr … 指定安装路径
make
CMake编译静态、动态库,并使用外部共享库_第2张图片
make install:可以看到动态库(/usr/lib64)和静态库(usr/lib),以及头文件都安装
CMake编译静态、动态库,并使用外部共享库_第3张图片
CMake编译静态、动态库,并使用外部共享库_第4张图片

使用外部共享库

接下来我们使用刚编译的静态以及动态库

文件目录结构

CMake编译静态、动态库,并使用外部共享库_第5张图片

文件内容

cmake03/CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

PROJECT(MAIN)

ADD_SUBDIRECTORY(src bin)

src/CMakeLists.txt

#include头文件所在位置
INCLUDE_DIRECTORIES(/usr/include/hello)

ADD_EXECUTABLE(main main.cpp)

# TARGET_LINK_LIBRARIES:只需要给出动态链接库的名字就行了
#前提:libhello.so需要在系统环境变量中的

#链接动态库
TARGET_LINK_LIBRARIES(main libhello.so)
#链接静态库
#TARGET_LINK_LIBRARIES(main libhello.a)

#生成可调试的版本 cmake .. -DCMAKE_BUILD_TYPE=debug

src/main.cpp

#include
int main()
{
    HelloFunc();
}

外部构建与运行

cd build
cmake … -DCMAKE_BUILD_TYPE=debug 生成可调试的版本
CMake编译静态、动态库,并使用外部共享库_第6张图片
make
CMake编译静态、动态库,并使用外部共享库_第7张图片
cd bin/
./main
在这里插入图片描述

你可能感兴趣的:(Cmake,CMake)