Windows下cmake生成dll文件

1.
文件结构如下:
两个文件head && src,以及头文件,c文件。

src-->main.c
|  -->hello.c
   -->CMakeLists.txt
CMakeLists.txt
|
head-->hello.h

内容如下:

head.h

#ifndef HELLO_H
#define HELLO_H
#include "stdio.h"
void hello(void);
void* add(short a,short b); 
#endif 

hello.c

#include "hello.h"
void hello(void)
{
	printf("Hello world!\n");
 } 
void* add(short a,short b)
{
	void *p;
	int result;
	result = a + b;
	p = &result;
	return p;
} 

main.c

#include "hello.h"
int main(void)
{
	hello();
	printf("betaV2 test!\n"); 
	printf("sum:%d\n",*(short*)add(2,3)); 
	return 0;
}

顶层的CMakeLists.txt

#step.1
cmake_minimum_required(VERSION 3.0)
project(Hello)

include_directories("C:/Users/ASUS/Desktop/betaV2/head")     #包含头文件

add_subdirectory(src bin)  			#libhello.dll生成在bin目录下    

message("==================================================")

#step.2
link_directories("C:/Users/ASUS/Desktop/betaV2/build/bin/libhello.dll")
link_libraries("C:/Users/ASUS/Desktop/betaV2/build/bin/libhello.dll")

add_executable(main   C:/Users/ASUS/Desktop/betaV2/src/main.c)

#step.3
#再进入build下,再执行cmake -G "MinGW Makefiles" ..
#进入bin目录,执行mingw32-make
#返回上一级目录,执行mingw32-make
#得到main.exe文件后要将bin下的libhello.dll移动到build目录下去,才能完整的运行main.exe
#否则报缺少xxx.dll文件的错误

#step.4
#若修改了某个c文件,再次进入build(或者bin文件下)执行mingw32-make即可更新!
#最后将libxxx.dll使用copy命令复制到上一级目录里面去。

src下的CMakeLists.txt

add_library(hello  SHARED  hello.c)

**2.**构建
新建build文件,文件目录如下:

src-->main.c
|  -->hello.c
   -->CMakeLists.txt
CMakeLists.txt
|
head-->hello.h
|
build

进入到build目录下,cmake -G "MinGW Makefiles" ..

cmake之后,产生如下文件:

进入bin目录下,mingw32-make

再返回build,mingw32-make
此时生成了main.exe,将bin下的libhello.dll复制到build下。
在这里插入图片描述
main.exe运行如下:

将libhello.dll移走,再来执行main.exe:
在这里插入图片描述
至此,dll成功链接到main.exe中去了!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ho_Yim

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

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

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

打赏作者

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

抵扣说明:

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

余额充值