0

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

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

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

4

1 回答 1

2

我相信,CMake ( http://www.cmake.org/ ) 是目前最好的 C++。与 C++ 本身一样,CMake 使用起来既不美观也不简单,但与 C++ 一样,它功能强大且用途广泛。

它目前被大量需要自定义和/或复杂配置和构建的项目使用。

以下是它的一些功能,您可能会觉得有用:

  1. 它不是构建工具。它生成将由本机构建工具使用的文件——Visual Studio 解决方案文件、GNU make 文件等等。它支持很多开箱即用的编译器——即 cl、gcc、clang。因此,这解决了您问题的“IDE”部分。
  2. 它有一个有用的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)
  3. 它有一个 ExternalProject 扩展,可以帮助自动下载、构建和安装库。例如对于 zlib,将以下内容添加到您的 CMakeLists.txt:
    include(ExternalProject)
    ExternalProject_Add(
    ZLIB
    URL http://zlib.net/zlib-1.2.8.tar.gz
    )
    
    它将从给定的 url 获取 tarball,构建 zlib 并安装它。之后,您可以再次使用 find_package。
  4. 归根结底,CMake 是高度可定制的。您可以自定义 ExternalProject_Add 函数来更改下载、构建和安装规则。如果它也没有帮助,您可以随时回退到调用curlgit clone获取源,并手动调用构建和安装命令。

再一次,它不是一个开箱即用的解决方案,但它可以完成工作,这得到了相当大的用户群的认可。套用已知的报价,'CMake 是最糟糕的构建工具,但其他人更糟'

于 2013-11-06T12:43:49.520 回答