CMake "make install"或在窗口中包含库
CMake "make install" or including a library in windows
我正在尝试创建一个开源C++项目。我希望它尽可能容易地构建,但同时跨平台。我不需要gui或像boost或Qt这样的重库,所以我决定使用GitHub、CMake和LibSourcey。我的问题是,我找不到一种方法可以让我的项目在windows中轻松构建,而windows是我的开发环境。如何在Windows中"安装"库以用于我的项目?我甚至必须把它安装在窗户里吗?是否可以自动下载、构建和链接它?
在windows上,除了安装程序,我还想制作一个可移植的版本,所以不想要任何硬编码的库路径。
我认为,在一些平台上,比如Linux,库是由维护人员独立构建和打包的。所以我不应该把自己的副本捆起来。
所以,我的问题是:如何建立一个跨平台且易于构建的项目,最佳实践是什么?
例如,您可以在git repo中创建git submodule
contrib/LibSourcery
和LibSourcery
的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使用新的工具链。
- 如何在 C++ 的 .so 文件中包含库
- 如何在内核中添加包含库的路径?
- 在基于命令行的QT插件构建中包含库
- 检查包含库C++的大小
- 在 C++ 中包含库数据库.txt文件时出错
- C++ 在虚幻引擎中包含库后重新定义类型
- 无法在Windows中找到来自cmake的MySQL和Boost包含/库
- 包含库,同时在 XCode 中以C++编码
- 如何在 CMake 项目中正确包含库
- 修改生成文件以包含库并使用 C++11
- 忽略来自 GDB(终端)中的包含/库文件的调试消息
- 在标题文件和CPP文件中都包含库
- 在Visual Studio C 项目中设置默认的附加包含/库路径
- 在C 项目中包含库的不同方式是什么?
- 在 cmake c++ 项目中包含库的首选方法是什么?
- 在包含库时找不到Qt shared_ptr
- 如何在命令行上使用 Visual Studio 进行编译时包含库
- 彭博数据 API 如何包含库 c++
- G++ 不包含库
- CMake "make install"或在窗口中包含库