Closed myd7349 closed 1 year ago
多谢
啊这!@skywind3000 大佬也太快了。我刚刚又推送了一次,正在解释第二次推送的原因:
今天又想了一下,感觉昨天的提交中对于 subproject 的特殊处理的逻辑对于 KCP 这样的库太重了(考虑到 KCP 核心代码也仅有两个文件),且有些偏离主旨(完善动态库、静态库编译),所以就移除了。如果大佬觉得简化后的版本可以接受,我可以 squash 成一个提交。
题外话:今天发现 CMake 3.21 里新增了 https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html 。
本补丁是对 https://github.com/skywind3000/kcp/pull/376 的一个补充(考虑到 https://github.com/skywind3000/kcp/pull/376 在增加了动态库 install 的同时,未保留原来的静态库 install)。
将 CMake 最小版本需求从 2.6 升到了 2.8.12,以消除构建过程中的 deprecation warning;
新增三个选项,以给用户对构建过程更多控制:
对于 KCP_BUILD_INSTALL、KCP_BUILD_TESTS:
完善 Windows 平台动态库构建支持;
在 Windows 平台上生成动态库要么需要通过 __declspec(dllexport) 来修饰要导出的函数符号,要么需要通过一个 DEF 文件 来声明所有要导出的符号。使用前一种方案可能需要在 ikcp.h 中加一段宏定义,所以我这里选择了使用一个 DEF 文件来声明所有要导出的符号。
完善 Windows 平台动态库的 install;
本补丁与 https://github.com/skywind3000/kcp/pull/376 不兼容的部分:
可以进一步完善的地方:
目前,我是直接在 CMakeLists.txt 里将导出的符号信息写入到一个临时的 exports.def 中的。如果用户不使用 CMake(比如:用户用 nmake),为了给予其方便,可考虑将 exports.def 提交到代码库里。