【Cmake】在Windows下用Cmake构建C++工程项目——构建静态库与动态库——3

4 篇文章 4 订阅

一. 准备工作

1)在D:\vs_test\cmake_test目录下,新建t3文件夹;

2)在t3下,新建目录lib、build和文件CMakeLists.txt。lib是用来存放源文件的。

3)在目录lib下,新建CMakeLists.txthello.cpp、hello.h

 t3目录下的CMakeLists.txt 文件内容:

PROJECT(HELLOLIB)
ADD_SUBDIRECTORY(lib bin)

 lib/CMakeList.txt 内容:

SET(LIBHELLO_SRC hello.cpp)
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})

 lib/hello.cpp 内容:

#include "hello.h"

void HelloFunc()
{
	std::cout << "Hello World !\n";
	while (1);
}

lib/hello.h 内容:

#ifndef HELLO_H
#define HELLO_H

#include <iostream>
using namespace std;

void HelloFunc();

#endif

二. 编译共享库

具体的构建方法参考我第一篇文章:Cmake】在Windows下用Cmake构建C++工程项目——cmake 的 helloworld——1

cmake编译成功之后,可以看到 t3\build\bin\Debug 目录下生成了动态库 hello.dll 

注意:如果是在Linux环境下,那么得到的就是 hello.so,这就是我们期望的共享库。

三. 语法解释 

主要是对 lib/CMakeList.txt 的语法解释。

ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})

ADD_LIBRARY(libname  [SHARED|STATIC|MODULE]  [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)

SHARED,表示 动态库
STATIC,表示 静态库
MODULE,表示 在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待。EXCLUDE_FROM_ALL 参数的意思是这个库不会被默认构建,除非有其他的组件依赖或者手
工构建。

在我们这个例子中,ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})是指:

hello是可执行文件;SHARED会生成动态库;${LIBHELLO_SRC}是指 hello.cpp

四. 添加静态库

同样使用上面的指令,我们在支持动态库的基础上再为工程添加一个静态库,并将名称也取为与动态库一样hello。
lib/CMakeList.txt 内容:

SET(LIBHELLO_SRC hello.cpp)
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC})
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")

如果是添加静态库,用这句:ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC})。

如果只有这一句,那么静态库根本不会被构建,仍然只生成一个动态库。因为 hello 作为一个 target 是不能重名的,所以,静态库构建指令无效。

可以改为:ADD_LIBRARY(hello_static STATIC ${LIBHELLO_SRC}) 这样同样可以生成一个静态库hello_static.lib,但和动态库的名字不一样。但是,我们需要的是名字相同的静态库和动态库。

SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")

这个指令就是把生成的hello_static改个名字,改为hello,这样动态库和静态库名字就一样了。

编译之后,如图:

 任务完成。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wolves_liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值