2013-02-26 52 views
0

我的C++程序是使用CMake针对多种操作系统(Win7,MacOS & Linux)编译的。Jenkins + CMake适用于多种操作系统和库版本

对于OS相关的东西,我在做喜欢的东西:

if (${APPLE}) 
    // Do MacOS dependent things here 
elseif(${WIN32}) 
    // Do Win dependent things here 
elseif(${UNIX}) 
    // Do Linux dependent things here 
endif (${APPLE}) 

现在,我需要我的程序在不同版本库的链接。以同样的方式继续将很快变得不切实际。

我怎样才能编译我的程序多个操作系统对多个版本的库,同时保持一切实用,这样很容易添加新的操作系统和/或新版本的库?

最终,一切都将与詹金斯整合,所以我不知道在CMake或Jenkins水平(或两者)工作是否更好。

回答

1

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

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

一种可能的方式是将有单独的文件中所有特定于平台的代码和每个刚include单一ifelseifelse块。

+0

感谢您的回答。对于每个库和每个操作系统,您需要不同的头文件/二进制文件路径。 find_library和find_file只适用于“标准”库吗? – Korchkidu 2013-02-27 06:46:35

+0

另外,我需要使用同一个库的几个版本。那么,为每个版本编写一个CMake会更好吗?或者将库版本作为参数传递给CMake? – Korchkidu 2013-02-27 08:04:41

+0

'find_library'和'find_file'可以用于*任何*库或文件 - 不只是标准的。通过添加搜索路径,您可以帮助CMake在非标准位置查找项目。至于您对版本的问题,我会亲自将所需的最低版本编码到CMake文件中。似乎有点奇怪,不同的平台需要不同的版本。可能值得一看,将它们全部引入相同的版本? – Fraser 2013-02-27 23:55:50

相关问题