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中去了!