使用CMake为多个操作系统(Win7,MacOS和Linux)编译了我的C ++程序。
对于依赖操作系统的东西,我做的事情是:
if (${APPLE})
// Do MacOS dependent things here
elseif(${WIN32})
// Do Win dependent things here
elseif(${UNIX})
// Do Linux dependent things here
endif (${APPLE})
现在,我需要将我的程序链接到库的不同版本。继续以同样的方式很快就会变得不切实际。
我如何针对多个版本的库编译多个操作系统的程序,同时保持一切实用,以便添加新操作系统和/或新版本的库?
最终,所有内容都将与Jenkins集成,因此我不知道在CMake或Jenkins级别(或两者)工作是否更好。
答案 0 :(得分:1)
这里可能没有“正确”的答案。 CMake的目的是提供跨平台制作(因此得名),因此,它提供了许多方法来减少或消除特定于平台的代码。
我倾向于发现我需要特定于平台的块的大多数情况是在依赖项查找(find_library
,find_file
等)或设置编译器/链接器标志。 (当然,我的经验可能不典型,甚至适用于您的情况)。这通常意味着给定的CMakeLists文件中没有太多地方需要平台或编译器特定的代码。
清理的一种可能方法是将所有特定于平台的代码放在单独的文件中,并且只在if
elseif
else
块中放置include
。