我需要为多个平台(Windows和Linux)32和64位以及多个编译器(Visual Studio 2010和Visual Studio 2017)构建C ++代码。
我使用了多个第三方,例如Boost,Tbb,Xerces等。
对于Visual Studio 2010,Visual Studio 2017、32 / 64位等,我该如何处理。我需要使用不同版本的第三方包含和库?
我是否需要在CMakeLists.txt文件中添加类似'if'语句的内容,以便在不同条件下指定不同的包含/库路径和不同的库文件名?
答案 0 :(得分:0)
对于Visual Studio 2010,Visual Studio 2017、32 / 64位等,我该如何处理。我需要使用不同版本的第三方包含和库?
实际上,您无需执行任何特殊操作即可“处理此事实”%)
例如,您可以下载Official prebuilt Boost binaries(例如,多合一软件包)并将其安装到默认路径C:\local\boost
。根据所选的工具集/ VS版本,find_package(boost ...)
会寻求合适的库,而无需您付出额外的努力。您只使用没有if
的找到的库。
与Linux相同。假设您需要Ubuntu 18.04 amd64和CentOS 7 x86。只需安装带有发行版的boost软件包,否则就可以自己构建。然后“使用”%)
我是否需要在CMakeLists.txt文件中添加类似'if'语句的内容,以便在不同条件下指定不同的包含/库路径和不同的库文件名?
听起来好像对CMake的工作方式有很大的误解%)在项目的CMakeLists.txt
中,您恰好描述了一个(对于多配置生成器来说,是几个)构建。为了实现这一点,您的CMakeLists.txt
为所需的第三方提供了find_package
,他们将找到任何依赖项的一个确切版本(好的,我现在正在谈论的是普通项目)。然后使用不同的操作系统/环境,您可以构建所需的工件。
因此,您只需要“不同的”包含/库路径。从项目的角度来看,您仅使用find_package
(用于增强等),然后使用其结果(导入的目标)。因为通常构建是在准备好的环境中进行的,例如docker或vagrant映像,其中安装了所有必备组件,并且您仅使用唯一的OS /环境就无法生成所有必需的构建,所以您不需要安装其他版本。
...确切地说,您可以...在理论上...但是设置交叉编译环境比烘焙目标操作系统的docker / vagrant映像要困难得多。
因此,对于您的情况,您需要几次构建相同的源: