Jenkins+CMake,适用于多个操作系统和库版本

Jenkins + CMake for multiple OS and library versions

本文关键字:版本 操作系统 适用于 Jenkins+CMake      更新时间:2023-10-16

我的C++程序是使用CMake为多个操作系统(Win7、MacOS和Linux(编译的。

对于依赖操作系统的东西,我正在做一些事情,比如:

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级别工作(或两者兼有(更好。

这里可能没有"正确"的答案。CMake的目的是提供跨平台Make(因此得名(,因此,它提供了许多减少或消除平台特定代码的方法。

我倾向于发现,我需要平台特定块的大多数情况要么是在依赖项查找(find_libraryfind_file等(期间,要么是设置编译器/链接器标志。(当然,我的经验可能不是典型的,甚至不适用于你的情况(。这通常意味着在给定的CMakeLists文件中没有太多地方需要平台或编译器特定的代码。

一种可能的清理方法是将所有特定于平台的代码都放在单独的文件中,并且在单个if elseif else块中只放include