目前,我的应用程序的存储库包含 Visual Studio 11 项目文件、我的源文件和头文件、库头文件及其编译的 *.lib 文件和一些资产。
但是在每个新平台上建立项目以测试兼容性或继续开发是一项很大的工作。每次我必须为当前 IDE 创建一个新项目时,更重要的是,下载所有使用的第三方库并为当前编译器编译 *.lib 文件。
有没有办法在所有平台上自动获取所需的库并将它们编译为 *.lib 文件?此外,涵盖项目设置会很愉快,这样可以更轻松地为新编译器或 IDE 设置项目。
目前,我的应用程序的存储库包含 Visual Studio 11 项目文件、我的源文件和头文件、库头文件及其编译的 *.lib 文件和一些资产。
但是在每个新平台上建立项目以测试兼容性或继续开发是一项很大的工作。每次我必须为当前 IDE 创建一个新项目时,更重要的是,下载所有使用的第三方库并为当前编译器编译 *.lib 文件。
有没有办法在所有平台上自动获取所需的库并将它们编译为 *.lib 文件?此外,涵盖项目设置会很愉快,这样可以更轻松地为新编译器或 IDE 设置项目。
我相信,CMake ( http://www.cmake.org/ ) 是目前最好的 C++。与 C++ 本身一样,CMake 使用起来既不美观也不简单,但与 C++ 一样,它功能强大且用途广泛。
它目前被大量需要自定义和/或复杂配置和构建的项目使用。
以下是它的一些功能,您可能会觉得有用:
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)
include(ExternalProject)
ExternalProject_Add(
ZLIB
URL http://zlib.net/zlib-1.2.8.tar.gz
)
它将从给定的 url 获取 tarball,构建 zlib 并安装它。之后,您可以再次使用 find_package。curl
或git clone
获取源,并手动调用构建和安装命令。再一次,它不是一个开箱即用的解决方案,但它可以完成工作,这得到了相当大的用户群的认可。套用已知的报价,'CMake 是最糟糕的构建工具,但其他人更糟'