目前,我的应用程序的存储库包含 Visual Studio 11 项目文件、我的源文件和头文件、库头文件及其编译的 *.lib 文件和一些 Assets 。
但要在每个新平台上建立项目以测试兼容性或继续开发是一项巨大的努力。每次我必须为当前的 IDE 创建一个新项目,更重要的是,下载所有使用的第三方库并为当前的编译器编译 *.lib 文件。
有没有办法在所有平台上自动获取所需的库并将它们编译为 *.lib 文件?此外,最好涵盖项目设置,以便更轻松地为新编译器或 IDE 设置项目。
最佳答案
我相信,CMake ( http://www.cmake.org/ ) 是目前最好的 C++。与 C++ 本身一样,CMake 既不漂亮也不易于使用,但同样,与 C++ 一样,它非常强大且用途广泛。
它目前被大量需要自定义和/或复杂配置和构建的项目使用。
以下是它的一些功能,您可能会觉得有用:
- 它不是构建工具。它生成将由 native 构建工具使用的文件 - Visual Studio 解决方案文件、GNU make 文件等等。它支持很多开箱即用的编译器——即 cl、gcc、clang。因此,这解决了您问题的“IDE”部分。
- 它有一个有用的
find_package
宏,可以帮助找到已安装的库以在项目中使用它。例如。如果你安装了 boost 库,你可以使用类似下面的代码,我相信它是相当 self 描述的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:
它将从给定的 url 获取 tarball,构建 zlib,并安装它。之后您可以再次使用 find_package。include(ExternalProject) ExternalProject_Add( ZLIB URL <a href="http://zlib.net/zlib-1.2.8.tar.gz" rel="noreferrer noopener nofollow">http://zlib.net/zlib-1.2.8.tar.gz</a> )
- 归根结底,CMake 是高度可定制的。您可以自定义 ExternalProject_Add 函数来更改下载、构建和安装规则。如果两者都没有帮助,您始终可以回退到调用
curl
或git clone
来获取源代码,然后手动调用构建和安装命令。
再次重申,它不是开箱即用或刚好可用的解决方案,但它可以完成工作,这一点得到了相当大的用户群的认可。套用一句名言,“CMake 是最糟糕的构建工具,但其他工具更糟”
关于c++ - 如何使我的项目易于设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19810169/