从现有Makefile创建CMakeLists文件

Pra*_*har 14 c++ linux makefile cmake

我想用来cmake为C++项目生成我的构建文件.我有一个存在的Makefile.我在Makefile使用标准cmake语法生成此问题时遇到问题.

如何包括标准C++库,例如 -lstdc++ -lpthread -lboost_thread-mtTARGET_LINK_LIBRARIES部分cmake?或者这些文件是否应包含在该ADD_DEPENDENCIES部分中.

(OR)是否有一个简单的工具CMakeList.txt从a 生成文件Makefile

Com*_*sMS 9

不幸的是,从Makefile到CMakeLists没有直接的1:1转换.由于CMake应该在所有平台上运行,因此它不能依赖于像GNU make那样的平台特定假设,这使某些地方的事情变得复杂.

特别是,CMake为使用库提供了一个非常强大且相当复杂的机制:您可以使用库的名称调用find_package,它将从您的cmake模块路径调用库搜索脚本.此脚本(也是用CMake编写的)将尝试检测库的头文件和lib文件的位置,并将它们存储在几个CMake变量中,然后可以将这些变量传递给相应的CMake命令,如include_directories和target_link_libraries.

这种方法存在两个问题:首先,您需要一个搜索脚本.幸运的是,CMake附带了Pthreads,Boost和其他几个的搜索脚本,但是如果你使用的是更具异国情调的库,你可能必须自己编写搜索脚本,这首先是一种神秘的体验......

第二个主要问题是搜索脚本没有标准的方式来返回其结果.虽然使用的变量有命名约定,但通常不适用.在实践中,这意味着您必须查看搜索脚本的来源以了解如何使用它.幸运的是,CMake附带的脚本大多都有很好的文档记录.

内置脚本位于某个地方<cmake-install-prefix>/share/cmake-2.8/Modules.对于您的问题,请查看FindBoost.cmake和FindThreads.cmake文件(CMake应自动链接到标准库).Anycorn已经提供了一些使用Boost脚本的示例代码,您需要知道的其他内容都在CMake文档中或直接在搜索脚本文件中.