首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake添加不区分大小写的源文件

CMake添加不区分大小写的源文件
EN

Stack Overflow用户
提问于 2019-12-18 14:06:49
回答 3查看 1.7K关注 0票数 2

我试图在linux中为已有的CMakeLists.txt已经构建的项目构建二进制文件。我经常遇到一些问题,CMakeLists.txt试图添加一个头文件或源文件,但是不能。源文件存在于它正在查找的目录中,但情况不匹配。例如,这里有一个标题搜索:

代码语言:javascript
复制
set(Headers
    resource.h
    stdafx.h
    ...
)

我在说fatal error: stdafx.h: No such file or directory时遇到了一个错误,但是目录中的文件是StdAfx.h而不是stdafx.h。显然,CMake无法建立这些文件是相同的连接。

我的问题是,这个项目文件是6GB的代码,如果我必须进入并更改每一个错误大写文件的包含,我永远不会完成任何事情。我有没有办法告诉CMake,文件名可能有不同的大写字母?或者是我把所有的事情都用手做,直到它起作用。

编辑:它看起来好像是区分大小写的Linux文件系统,所以我要删除cmake标记,因为它不是cmake的问题。我正在寻找一种解决方案,允许我更改.cpp文件中的所有.cpp行,以匹配现有的头文件名,而不是更改.h文件名。

编辑:只是对于以后来这里的人来说,完全错误是:

代码语言:javascript
复制
[ 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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-18 14:35:17

问题不在于cmake,而在于文件系统。linux中的文件系统通常区分大小写。H与Stdafx.h不是同一个文件。如果您的CMakeLists.txt和源文件使用的大小写与文件名不匹配,那么该项目与linux及其文件系统不兼容。所以,你的选择是:

  1. 使用不区分大小写的文件系统,因为项目支持。
    1. 您可以在linux上尝试一个不区分大小写的文件系统,但这是一个麻烦的解决方案。
    2. 用窗户。

  1. 通过纠正CMakeLists.txt和包含中的文件名及其引用,修正项目以支持区分大小写的文件系统。请注意,如果程序是用不区分大小写的文件系统编写的,那么在执行程序时可能会有进一步的问题。

我永远不会完成任何事情

简单解决方案:将所有文件名更改为小写,将CMakeLists.txt中的所有引用和源中的包含更改为小写:不需要执行比较或尝试计算包含根。两者都可以通过一个简短的shell脚本来执行。虽然在技术上不正确,因为源文件具有非规则语法,但正则表达式可能足以匹配包含指令。

票数 3
EN

Stack Overflow用户

发布于 2019-12-18 14:19:14

您可以尝试使用file方法收集需要构建的所有文件,例如:

代码语言:javascript
复制
file(GLOB SRCS "*.cpp")
file(GLOB HDRS "*.h")

add_executable(${PROJECT_NAME} ${HDRS} ${SRCS})

UPD: By,所以您只能收集任何文件,不管它们的名称是什么。您最好通过一些脚本更改文件名。

票数 1
EN

Stack Overflow用户

发布于 2019-12-18 14:20:30

如果使用允许查找和替换整个项目的编辑器,手动更改整个项目的大写可能并不困难。

有像2017原子这样的例子。

只需尝试按ctrl + shift + H。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59393782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档