在建立一个大型项目时,我一直在尝试找出并采用最新的cmake最佳实践。一些人主张不要在您的cmake文件中放置什么。通常,它可以归结为(释义):
CMake文件应仅描述目标构建所需要的内容,而不应对其他任何情况进行假设。
这一切都说得通,但是,这引出了一个问题:
如果不是在cmake脚本中,应该在哪里 定义所有“可选”设置?
此外,如果我们只是在谈论一个库,而不是一个依赖于很多库的应用程序,则似乎有所不同。
如果您只是在构建一个小型库,那么一切似乎都很好,无论使用该库的人都有责任决定所有这些额外的细节。
但是,当构建具有许多依赖关系的大型应用程序时,最好在某个位置定义所有这些设置。在大多数构建系统中,您会获得常见的配置,例如调试和发布构建。 CMake似乎对“ Debug”,“ Release”,“ MinSizeRel”,“ RelWithDebInfo”具有标准支持(顺便说一句,我不记得缩写),但是这些都不是强制性的,因此您可能只得到一个空字符串。
即使您打算遵守这些规定,您是否只是检查构建配置并在root cmake脚本中设置所有内容,或者设置什么?
作为一个具体示例:我的项目依赖于一堆第三方库,而不是将它们全部构建为项目的一部分,而是尝试对其进行预先构建。
为简单起见,我目前有一个构建脚本,该脚本标准化了我构建所有第三方库的方式:
cmake -DBUILD_SHARED_LIBS:BOOL=OFF \
-DBUILD_STATIC_LIBS:BOOL=ON \
-DCMAKE_POSITION_INDEPENDENT_CODE=On \
-DCMAKE_INSTALL_PREFIX=${install_prefix} \
-DCMAKE_PREFIX_PATH="${DIST}" $@ ${CMAKE_SRC_DIR}
但是,此构建脚本是bash,并且不是完全可移植的。有更好的选择吧?
我不希望项目的其他开发人员必须记住很多要传递给cmake的参数,以便按预期的方式构建项目。