Gradle 和 Cmake 无法找到绝对存在的 cpp 文件

Posted

技术标签:

【中文标题】Gradle 和 Cmake 无法找到绝对存在的 cpp 文件【英文标题】:Gradle and Cmake failing to find cpp file that is definitely there 【发布时间】:2020-05-21 22:39:31 【问题描述】:

我运行 gradle 来构建一个 android .aar,它报告它找不到文件,但文件肯定在那里。

$ ./gradlew.bat assembleRelease

> Task :webrtc-native:externalNativeBuildRelease FAILED
Build mrwebrtc arm64-v8a
ninja: error: 'C:/Developer/Microsoft-MRWebRTC/libs/mrwebrtc/src/interop/data_channel_interop.cpp', needed by 'CMakeFiles/mrwebrtc.dir/C_/Developer/Microsoft-MRWebRTC/libs/mrwebrtc/src/interop/data_channel_interop.cpp.o', missing and no known rule to make it

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':webrtc-native:externalNativeBuildRelease'.
> Build command failed.
  Error while executing process C:\Users\User\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\cmake.exe with arguments --build C:\Developer\Microsoft-MRWebRTC\tools\build\android\webrtc-native\.externalNativeBuild\cmake\release\arm64-v8a --target mrwebrtc
  ninja: error: 'C:/Developer/Microsoft-MRWebRTC/libs/mrwebrtc/src/interop/data_channel_interop.cpp', needed by 'CMakeFiles/mrwebrtc.dir/C_/Developer/Microsoft-MRWebRTC/libs/mrwebrtc/src/interop/data_channel_interop.cpp.o', missing and no known rule to make it

但是文件C:/Developer/Microsoft-MRWebRTC/libs/mrwebrtc/src/interop/data_channel_interop.cpp肯定存在。

$ cd C:/Developer/Microsoft-MRWebRTC/libs/mrwebrtc/src/interop/

User MSYS /c/Developer/Microsoft-MRWebRTC/libs/mrwebrtc/src/interop (master)
$ ls
data_channel_interop.cpp                 global_factory.cpp  interop_api.cpp                local_video_track_interop.cpp  remote_audio_track_interop.cpp  transceiver_interop.cpp
external_video_track_source_interop.cpp  global_factory.h    local_audio_track_interop.cpp  peer_connection_interop.cpp    remote_video_track_interop.cpp

有人可以帮忙吗?我有点想不通了。

【问题讨论】:

Windows 路径(\ 作为分隔符)和 Unix 路径(/ 作为分隔符)看起来有些混乱。 【参考方案1】:

我发现这是因为我在某些目录上启用了“caseSensitive”标志。请注意,这是 WSL2 的一项新功能,并且您可能会在没有意识到的情况下启用一些特殊功能。 Windows cmake 无法遍历启用了此标志的目录。

在此处阅读: https://devblogs.microsoft.com/commandline/per-directory-case-sensitivity-and-wsl/

【讨论】:

以上是关于Gradle 和 Cmake 无法找到绝对存在的 cpp 文件的主要内容,如果未能解决你的问题,请参考以下文章

gradle 设置密钥库文件的绝对路径值

解决Android Studio使用CMake无法编译出32位armeabi平台so库

CMake 和绝对标题路径

CMake 错误:CMake 无法找到与“Unix Makefiles”对应的构建程序。 CMAKE_MAKE_PROGRAM 未设置

在Windows 10上的CLion / CMake中“无法找到SFML”错误?

cmake中target_link_libraries()使用问题动态库使用绝对路径没问题,但是使用相对路径就矬了?