我了解 Jam 构建现有项目,CMake 生成要构建的项目。但是,鉴于我宁愿生成可以在各种 IDE 中使用的项目,而不是尝试将 Jam 集成到这些 IDE 中,有没有人有任何经验/成功将 Jamfile 转换为 CMakeLists.txt 文件?
3 回答
我曾经在我的所有 Linux 项目中使用 Jam,因为它比常规的 makefile 更容易。然后我发现了 CMake 并且没有回去。编写 CMakeLists.txt 文件与编写 Jamfile 一样容易,并且您可以免费获得特定于平台的 IDE 支持,尽管 IMO IDE 项目不像手动生成的那样干净。
据我所知,尽管 Jam 有很多优点,但如今很少有人使用 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 项目不会自动包含相关的头文件,因此我在上面的示例中明确包含了重要的头文件。这里有一个很好的例子,如果你还没有看过的话。
对于 Jam 到 CMake 的转换,尝试扩展 vcproj2cmake 以实现 Jam 解析器也可能很有用(CMake 语法文本流的生成器部分现在相当强大)。
所以我最终决定最好的办法是从头开始一个 CMAKE 项目。我们的 Jam 项目真是一团糟,我不想继承我们的意大利面条构建的残渣。
我发现这些资源最有帮助
http://www.cmake.org/Wiki/CMake_Useful_Variables http://www.cmake.org/cmake/help/v2.8.10/cmake.html