CMake "make install" 或在 windows 中包含一个库

CMake "make install" or including a library in windows

我正在尝试创建一个开源 C++ 项目。我希望它尽可能容易构建,但同时跨平台。 我不需要 gui 或像 boost 或 Qt 这样的重型库,所以我决定使用 GitHub、CMake 和 LibSourcey。 我的问题是,我找不到使我的项目易于在 windows 中构建的方法,这是我的开发环境。 我如何 "make install" Windows 中的库用于我的项目?我什至必须在 windows 中安装它吗? 是否可以自动下载、构建和link它?

在windows,除了安装程序,我还想制作一个便携版本,所以不要任何硬编码的库路径。

我假设,在某些平台上,例如 Linux,库是由维护者单独构建和打包的。所以我不应该只是捆绑我自己的副本。

所以,我的问题是: 如何建立跨平台且易于构建的项目,最佳实践是什么?

您可以在您的 git 存储库中创建 git submodule,例如使用路径 contrib/LibSourcery 和 url 到 LibSourcery 的 github 回购,因为 LibSourcery 使用 cmake 你只是 需要将这样的行添加到您的 CMakeLists.txt: add_subdirectory(contrib/LibSourcery)

所以想要使用您的代码的人,只需git clone --recursive url 获取所有代码和依赖项,然后 运行 cmake -G,为他选择的 IDE 创建项目(当然包括 MSVC++), 在 IDE 中打开项目并按下构建按钮,仅此而已。

使用babun。它是 cygwin 的包装器,它可以完美地满足我需要的一切,甚至可以使用 cmake 进行编译。

或者,您可以使用 premake,它使用 lua 作为配置系统并且在 windows.

上运行良好

没有优雅的跨平台方式,因为 "make install" 的想法在 Windows 上不存在,因此在那里使用 cmake install 是未定义的。对于应该有助于跨平台的东西,我觉得这是 cmake 的不足。

我的解决方案是编写一个自定义_INSTALL,它采用与 cmake install 相同的参数,然后在 Linux 上它只调用安装,在 Windows 上它执行一个 add_command将 post-build 复制到安装路径,完成同样的事情。基本上,_INSTALL 的行为方式与您期望的跨平台安装命令的行为方式相同。如果有兴趣可以分享我的 _INSTALL 功能。

_INSTALL 被放置在 Helper.cmake 中,并包含在我所有的 CMakeList.txt 项目中,所以我需要做的就是调用它,生成的 lib/inc 文件神奇地出现对于双赢和 linux.