CMake 添加不区分大小写的源文件
CMake adding case insensitive source files
我正在尝试在 linux 中为具有 CMakeList 的现有项目原生构建二进制文件.txt已经构建好了。我一直遇到CMakeLists.txt尝试添加头文件或源文件但无法添加的问题。源文件存在于其查找的目录中,但大小写不匹配。例如,下面是标题搜索之一:
set(Headers
resource.h
stdafx.h
...
)
我收到一个错误说fatal error: stdafx.h: No such file or directory
,但目录中的文件StdAfx.h
而不是stdafx.h
。显然,CMake 无法建立这些是相同文件的连接。
我的问题是,这个项目文件是 6 GB 的代码,如果我必须进入并更改每个大写错误的文件的包含,我永远不会完成任何事情。有没有办法让我告诉 CMake 文件名可能有不同的大小写?还是我被困在手工做所有事情,直到它起作用。
编辑: 看起来好像是 Linux 文件系统区分大小写,所以我删除了 cmake 标签,因为它不是 cmake 的问题。我正在寻找一种解决方案,允许我更改.cpp文件中的所有#include <....>
行以匹配现有的头文件名,而不是更改 .h 文件名。
编辑:对于以后来的任何人,完整的错误是这样的:
[ 1%] Building CXX object Source/UeiSimuDriver/CMakeFiles/UeiSimuDriver_vc15.dir/StdAfx.cpp.o
In file included from /var/tmp/<workspaceHash>/Framework/Source/UeiSimuDriver/StdAfx.cpp:2
fatal error: stdafx.h: No such file or directory
#include "stdafx.h"
compilation terminated
问题不在于cmake,而在于文件系统。Linux 中的文件系统通常区分大小写。stdafx.h 与 Stdafx.h 不是同一个文件。如果您的 CMakeLists.txt 和源文件使用与文件名不匹配的错误大小写,则项目与 Linux 及其文件系统不兼容。因此,您的选择是:
- 使用不区分大小写的文件系统,因为这是项目支持的文件系统
- 您可以在 Linux 上尝试不区分大小写的文件系统,但这是一个黑客解决方案。
- 使用窗口。
- 修复项目以支持区分大小写的文件系统,方法是更正 CMakeList 中的文件名及其引用.txt和包含项。请注意,如果程序是在不区分大小写的文件系统下编写的,则在执行程序时可能会出现进一步的问题。
我永远不会完成任何事情
简单的解决方案:将所有文件名更改为小写,将CMakeLists中的所有引用更改为小写.txt并将源中的包含更改为小写:无需执行比较或尝试找出包含根。两者都可以使用简短的 shell 脚本执行。尽管由于源文件具有非正则语法,因此在技术上不正确,但正则表达式可能足以匹配 include 指令。
您可以尝试使用file
方法来收集需要构建的所有文件,例如:
file(GLOB SRCS "*.cpp")
file(GLOB HDRS "*.h")
add_executable(${PROJECT_NAME} ${HDRS} ${SRCS})
UPD:这样,您只能收集任何文件,无论它们的名称是什么。您最好通过一些脚本更改文件名。
如果您使用的编辑器允许您查找和替换整个项目,则手动更改整个项目的大写可能并不困难。
有像Visual Studio 2017和Atom这样的例子。
只需尝试按 ctrl + shift + H。
- 为测试目标创建具有不同源文件夹的文件
- 将图像添加到资源文件夹UWP C++
- 视觉工作室项目.提取源文件夹名称
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 切换大小写后如何阻止变量重置?
- make 命令如何避免重新编译未更改的源文件?
- C++两个源文件之间共享的枚举的静态实例
- 如何使用Qt 3D库加载和显示搅拌机.obj源文件场景
- 无法找到简单的开关大小写枚举错误
- 仿射密码解密,输出大小写不同
- 生成文件:动态源文件名和对象目录
- 无法使用 CMake 从其他文件夹添加源文件
- MinGW64 - Unicode 源文件错误?
- 编写宏函数来更改字符串的大小写?
- 有关从C++中的不同源文件引用类的问题
- 使字母检查不区分大小写
- 如何执行不区分大小写的字符串比较?
- "错误 (活动) E1696 无法打开源文件 "stdafx.h"--
- CMakeLists:使用 ExternalProject 从 Github 添加源文件
- CMake 添加不区分大小写的源文件