0

我的 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 级别(或两者)工作是否更好。

4

1 回答 1

1

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

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

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

于 2013-02-27T01:28:15.623 回答