我需要为多个平台(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'语句的内容,其中我为不同的条件指定了不同的包含/库路径和不同的库文件名?
我如何处理Visual Studio 2010,Visual Studio 2017,32 / 64位等事实。我需要使用不同版本的第三方包含和库?
实际上,你不需要做任何特殊的事情来“处理这个事实”%)例如,你可以下载Official prebuilt Boost binaries(例如一体化软件包)并安装它,比如默认路径C:\local\boost
。根据所选的工具集/ VS版本,find_package(boost ...)
将寻求合适的库,而无需您的额外努力。你只需使用找到的库,没有if
s。
适用于Linux。假设您需要Ubuntu 18.04 amd64和CentOS 7 x86。如果发布了发行版,只需安装升级包,如果没有,则自行构建。然后“使用”它%)
我是否需要在CMakeLists.txt文件中包含类似'if'语句的内容,其中我为不同的条件指定了不同的包含/库路径和不同的库文件名?
这听起来像是对CMake如何工作的巨大误解%)在项目的CMakeLists.txt
中,您只描述了一个(好的,少数,对于多配置生成器)构建。为了实现这一点,你的CMakeLists.txt
为所需的第三方提供find_package
,他们会找到任何依赖的一个版本(好吧,我现在正在谈论正常的项目)。然后使用不同的操作系统/环境,您可以构建所需的工件。
所以,你只需要“不同的”包含/库路径。从您的项目的角度来看,您只需使用find_package
(用于提升,等等)然后使用其结果(导入的任何目标)。因为通常构建发生在一个准备好的环境中,如docker或vagrant image,并且安装了所有先决条件,并且您无法使用唯一的OS /环境生成所有必需的构建,因此您不需要安装不同的版本......
......确切地说,你可以...理论上......但是设置交叉编译环境要比烘烤目标操作系统的docker / vagrant图像困难得多。
因此,对于您的情况,您需要几次构建相同的源: