Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve CMakeLists.txt #380

Merged
merged 2 commits into from
Nov 28, 2022
Merged

improve CMakeLists.txt #380

merged 2 commits into from
Nov 28, 2022

Conversation

myd7349
Copy link
Contributor

@myd7349 myd7349 commented Nov 27, 2022

本补丁是对 #376 的一个补充(考虑到 #376 在增加了动态库 install 的同时,未保留原来的静态库 install)。

  • 将 CMake 最小版本需求从 2.6 升到了 2.8.12,以消除构建过程中的 deprecation warning;

  • 新增三个选项,以给用户对构建过程更多控制:

    • KCP_BUILD_SHARED_LIBS:是否作为动态库构建,默认为 OFF,以与 BUILD_SHARED_LIBS 的默认保持一致;
    • KCP_BUILD_INSTALL:是否生成 install target;
    • KCP_BUILD_TESTS:是否构建测试项目;

    对于 KCP_BUILD_INSTALL、KCP_BUILD_TESTS:

    • 如果 KCP 是作为一个 Top project 来构建,则这两个开关项默认打开;
    • 如果 KCP 是作为一个子项目来构建(比如,通过 add_subdirectory),则这两个开关项默认关闭;
  • 完善 Windows 平台动态库构建支持;

    在 Windows 平台上生成动态库要么需要通过 __declspec(dllexport) 来修饰要导出的函数符号,要么需要通过一个 DEF 文件 来声明所有要导出的符号。使用前一种方案可能需要在 ikcp.h 中加一段宏定义,所以我这里选择了使用一个 DEF 文件来声明所有要导出的符号。

  • 完善 Windows 平台动态库的 install;

本补丁与 #376 不兼容的部分:

  • 不再同时构建静态库与动态库,而是让用户能够在二者之间选择其一;

可以进一步完善的地方:

目前,我是直接在 CMakeLists.txt 里将导出的符号信息写入到一个临时的 exports.def 中的。如果用户不使用 CMake(比如:用户用 nmake),为了给予其方便,可考虑将 exports.def 提交到代码库里。

- upgrade CMake minimal version;
- define three options to give users more control over the build process;
- fix Win32 dynamic build by exporting useful functions;
@skywind3000
Copy link
Owner

多谢

@skywind3000 skywind3000 merged commit f482028 into skywind3000:master Nov 28, 2022
@myd7349
Copy link
Contributor Author

myd7349 commented Nov 28, 2022

啊这!@skywind3000 大佬也太快了。我刚刚又推送了一次,正在解释第二次推送的原因:

今天又想了一下,感觉昨天的提交中对于 subproject 的特殊处理的逻辑对于 KCP 这样的库太重了(考虑到 KCP 核心代码也仅有两个文件),且有些偏离主旨(完善动态库、静态库编译),所以就移除了。如果大佬觉得简化后的版本可以接受,我可以 squash 成一个提交。

题外话:今天发现 CMake 3.21 里新增了 https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html

@myd7349 myd7349 deleted the cmake branch November 28, 2022 13:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants