现在,我的应用程序的存储库包含Visual Studio 11项目文件,我的源文件和头文件,库头及其编译的* .lib文件和一些资产。

但是,要在每个新平台上设置项目以测试兼容性或继续开发是一项巨大的工作。每次我必须为当前IDE创建一个新项目时,更重要的是,下载所有使用的第三方库并为当前编译器编译* .lib文件。

有没有一种方法可以自动获取所需的库并将它们编译为所有平台上的* .lib文件?此外,涵盖项目设置将是一件令人愉快的事情,这样可以更轻松地为新的编译器或IDE设置项目。

最佳答案

我相信CMake(http://www.cmake.org/)是目前最好的C ++。像C ++本身一样,CMake既不漂亮也不易于使用,但是再次像C ++一样,它非常强大且用途广泛。

当前,大量项目都在使用它,这些项目需要自定义和/或复杂的配置和构建。

这是其中的一些功能,您可能会发现有用:


它不是构建工具。它会生成将由本机生成工具使用的文件-Visual Studio解决方案文件,GNU make文件以及未使用的文件。它支持许多开箱即用的编译器,即cl,gcc,clang。因此,这解决了您问题的“ IDE”部分。
它具有一个有用的find_package宏,可帮助查找已安装的库以在项目中使用它。例如。如果安装了boost库,则可以使用类似以下代码的代码,我相信这是自我描述的

find_package( Boost COMPONENTS thread system)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
endif(Boost_FOUND)

它具有ExternalProject扩展,可以帮助自动化下载,构建和安装库。例如。对于zlib,将以下内容添加到您的CMakeLists.txt中:
include(ExternalProject)
ExternalProject_Add(
ZLIB
URL http://zlib.net/zlib-1.2.8.tar.gz
)
它将从给定的URL中获取压缩包,构建zlib并安装它。之后,您可以再次使用find_package。
归根结底,CMake是高度可定制的。您可以自定义ExternalProject_Add函数以更改下载,构建和安装规则。如果这两种方法也无济于事,您始终可以退回到调用curlgit clone来获取源代码,并手动调用构建和安装命令。


再一次,它不是一个开箱即用的解决方案,也不是一个可行的解决方案,但是它可以完成工作,这一点得到了相当大的用户群的认可。用已知的说法来解释,“ CMake是最差的构建工具,而其他的则更糟”

10-08 00:15
查看更多