CMake "make install"或在窗口中包含库

CMake "make install" or including a library in windows

本文关键字:窗口 包含库 make install CMake      更新时间:2023-10-16

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

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

我认为,在一些平台上,比如Linux,库是由维护人员独立构建和打包的。所以我不应该把自己的副本捆起来。

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

例如,您可以在git repo中创建git submodulecontrib/LibSourceryLibSourcery的github repo的url,因为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上它只调用INSTALL,在Windows上它执行一个add_command,它对安装路径进行构建后复制,从而完成相同的任务。基本上,_INSTALL的行为方式与您期望的跨平台安装命令的行为方式相同。如果有兴趣,可以分享我的_INSTALL函数。

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

您可以使用vcpkg,这是一个面向c和c++的开源软件包管理器。它允许轻松下载和编译库,然后像在linux上一样从CMake中使用find_package。它很容易使用。它甚至提供了关于如何更改cmake文件以使用库的提示。

我开始用命令行安装软件包,然后想知道为什么它们不会出现在visualstudio中。但我意识到默认情况下它会下载32位库。如果需要64位库,请使用.vcpkg install <libname>:x64-windows

运行integrate命令后,您将需要删除任何cmake缓存,以便MSVS使用新的工具链。