文章目录
1、
2、步骤
2.1 创建一个CMake项目
VS2019菜单栏——新建——项目
在搜索栏输入cmake,双击出现的CMake项目
配置好项目的名称和路径,点击创建
创建好的项目的目录层次如下:
testDll目录下的CMakeLists.txt内容如下:
# CMakeList.txt: testDll 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
# 将源代码添加到此项目的可执行文件。
add_executable (testDll "testDll.cpp" "testDll.h")
# TODO: 如有需要,请添加测试并安装目标。
和testDll目录同级的CMakeLists.txt内容如下:
# CMakeList.txt: 顶层 CMake 项目文件,在此处执行全局配置
# 并包含子项目。
#
cmake_minimum_required (VERSION 3.8)
project ("testDll")
# 包含子项目。
add_subdirectory ("testDll")
2.2 写一个简单的计算加法的函数
在testDll.h中添加:
#ifdef _WIN32
_declspec(dllexport) int add(int a, int b);
#endif // _WIN32
#ifdef __linux__
int add(int a, int b);
#endif
在testDll.cpp中添加:
int add(int a, int b)
{
return a + b;
}
2.3 调整CMakeLists.txt
调整为
# CMakeList.txt: testDll 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
# 将源代码添加到此项目的可执行文件。
project(add)
# 将源代码添加到此项目的可执行文件。
add_library(testdll SHARED "testDll.cpp" "testDll.h")
# TODO: 如有需要,请添加测试并安装目标。
就是将原有的
add_executable (testDll "testDll.cpp" "testDll.h")
删除掉,改成了
project(add)
# 将源代码添加到此项目的可执行文件。
add_library(testdll SHARED "testDll.cpp" "testDll.h")
2.4 Windows下编译x86的库
2.4.1 配置x86-release
需要x86-release的配置,这里没有因此需要添加,如果有的话可跳过
配置页面左上角点击“+”号,在弹出页面选择需要的配置,之后点击"选择”按钮
就会在左边的展示栏中出现选中的配置
接着Ctrl+s保存修改,这里主要是修改了CMakeSettings.json文件。保存之后会自动生成CMake。
注:切换配置时也会重新生成
2.4.2 选择启动项
在自动执行CMake生成之后这里就有这个dll了,接着点击选中,选择启动项的位置就变了
2.4.3 生成动态库
Ctrl+b,VS就会生成dll了。如果代码有错误,可根据提示修改,直至编译正常。
2.5 linux下编译动态库
注:要先确保远程的linux系统存在以下工具集:
cmake、gcc、gdb、rsync、zip、ninja-build
没有的话可以使用以下命令安装:
根据linux系统选择使用apt还是yum
sudo apt update
sudo apt install -y build-essential gdb rsync zip openssh-server
sudo yum update
sudo yum install -y build-essential gdb rsync zip openssh-server
2.5.1 参考2.4.1设置Linux-GCC-Release配置X64
2.5.2 配置远程linux计算机
如果本机是linux系统的另说
VS菜单栏:工具——选项——跨平台——连接管理器——点击添加,填入远程计算机的ip、端口、用户名、密码即可,点击确定关闭页面
接着点最下面的高级选项
IntelliSense模式选择linux-gcc-x64,CMake可执行文件填写对应的路径,可以适用which命令查看
保存修改
2.5.3 选择项目配置,生成动态库
选择Linux-GCC-Release,CMake会执行执行,等待完成
CMake完成后选择启动项的位置出现.so文件
查看日志提示编译生成的相关文件在/home/test/.vs/testDll/e0783f20-c071-4a34-aeae-f53e004596a6/out/build/Linux-GCC-Release,到目录下看看
目录下以及testDll目录下都没有.so文件。
是的,没有,因为我们还在执行生成动态库的步骤呢。。接下来回到VS生成项目
再去对应目录看看
到这里,再不修改任何代码的前提下,就完成了一个跨平台的动态库的编译了