从Jam迁移到CMake

时间:2012-04-10 21:00:03

标签: cross-platform cmake bjam jam

我理解Jam构建现有项目,CMake生成要构建的项目。但是,鉴于我宁愿生成可以在各种IDE中使用的项目,而不是尝试将Jam集成到那些IDE中,任何人都有任何经验/成功将Jamfile转换为CMakeLists。 txt文件?

3 个答案:

答案 0 :(得分:5)

我曾经在所有Linux项目中使用Jam,因为它比普通的makefile更容易。然后我发现了CMake,并没有回去。编写CMakeLists.txt文件与编写Jamfiles一样容易,并且您可以免费获得特定于平台的IDE支持,尽管IMO IDE项目并不像手工生成的那样干净。

据我所知,尽管有很多优点,但现在很少有人使用Jam。它确实声称能够在各种平台上构建,但与此同时,它似乎不再享受积极的开发,所以我倾向于不信任它的多平台声明。

据我所知,没有工具可以自动将Jamfiles的层次结构转换为CMakeLists.txt文件的层次结构,尽管这样的工具肯定是一个可行的项目。然而,由于Jam的不受欢迎以及较小程度上的CMake,除非你或我找到一些空闲时间,否则这样的工具还没有出现。 :(

如果您的项目不是太复杂,一些简单的搜索和替换操作应该将Jamfile转换为CMakeLists.txt文件。如果您的项目很复杂,那么手动转换它们可能是您最好的选择。

一些简单的转换:

  • HDRS += a.h b.h c.h ;变为include_directories(a.h b.h c.h)
  • Main HelloWorld : main.cpp utils.cpp ;变为add_executable(HelloWorld main.cpp utils.cpp utils.h)
  • Library helper : helper.cpp变为add_library(helper STATIC helper.cpp helper.h)
  • SubDir foo ;变为add_subdirectory(foo)
  • LinkLibraries HelloWorld : libhelper ;变为target_link_libraries(HelloWorld helper)

CMake生成的IDE项目不会自动包含相关的头文件,因此我在上面的示例中明确包含了重要的头文件。如果您还没有看到它,可以使用一个很好的例子here

答案 1 :(得分:1)

对于Jam to CMake转换,尝试扩展vcproj2cmake以获得Jam解析器实现可能也很有用(CMake语法文本流的生成器部分现在非常强大)。

答案 2 :(得分:0)

所以我最终决定最好的办法是从头开始一个CMAKE项目。我们的Jam项目非常混乱,我不想继续我们意大利面的构建。

我发现这些资源最有帮助

http://www.cmake.org/Wiki/CMake_Useful_Variables http://www.cmake.org/cmake/help/v2.8.10/cmake.html