多平台 C++ 项目和 CMakeLists.txt 源中的行终止

Posted

技术标签:

【中文标题】多平台 C++ 项目和 CMakeLists.txt 源中的行终止【英文标题】:Line termination in source for multiplatform C++ project and CMakeLists.txt 【发布时间】:2015-10-24 07:56:15 【问题描述】:

在几乎完全在 gnu-linux 下进行培训和工作后,我遇到了一个我必须从事的多平台项目。

我很失望地发现在 repo 中混合了 LF 和 CRLF 换行符。我注意到大多数 CRLF 是由两个提交者引入的,并在相关文件上运行 dos2unix

然而,我也注意到所有CMakeLists.txt 文件都是 CRLF 终止的,即使它们来自主要开发人员的提交(他们已经提交了所有其他以 LF 行结尾的源),所以暂时我不理会它们。

我不太熟悉 windows 或多平台开发,也不熟悉 cmake,我想知道:有什么约定吗?或者,是否有任何特定于 cmake 的工具甚至可以在 gnu-linux 上生成 CRLF?

如果可能的话,repo 位于https://github.com/glipari/rtlib2.0

【问题讨论】:

【参考方案1】:

有 CMake 规则:

换行符可以编码为 \n 或 \r\n 但将被转换为 \n 读取输入文件。

https://cmake.org/cmake/help/v3.3/manual/cmake-language.7.html#encoding

我知道的所有项目都使用 \n 并要求他们的开发人员相应地配置他们的编辑器。类似于尾随空格和制表符的使用。

如果您使用 Git,您可以要求您的开发人员使用 Git 提交挂钩来检查换行符。如果他们不遵循您的约定,则提交将被拒绝(除非开发人员禁用它)。

【讨论】:

以上是关于多平台 C++ 项目和 CMakeLists.txt 源中的行终止的主要内容,如果未能解决你的问题,请参考以下文章

重用编译器前端的结果,加快多配置/平台的 C++ 代码编译

用于播放/录制音频(.wav、.ogg)的 C++ 多平台库

使用 Cmake 配置 c++ OpenCV 项目

在多个平台的解决方案中构建 Visual Studio C++ 项目

园区自动驾驶实车平台决策规划控制系统——基于纯追踪算法的横向控制(C++实现)

用于多跨平台使用的音频库 C++(iphone、android...)