CMake中FetchContent的URL含#触发BYPRODUCTS不允许含#的错误求助
问题描述
在CMake的FetchContent中使用带#的URL时触发错误:BYPRODUCTS包含"#"是不被允许的。
相关代码
if (NOT glad_FOUND) include(FetchContent) FetchContent_Declare( glad URL "https://glad.dav1d.de/#language=c&specification=gl&api=gl%3D4.6&api=gles1%3Dnone&api=gles2%3Dnone&api=glsc2%3Dnone&profile=compatibility&loader=on" DOWNLOAD_NO_EXTRACT TRUE ) FetchContent_MakeAvailable(glad) endif()
错误信息
CMake Error at D:/IDEs/apps/CLion/ch-0/222.4167.35/bin/cmake/win/share/cmake-3.23/Modules/ExternalProject.cmake:2302:EVAL:2 (add_custom_command):
BYPRODUCTS containing a "#" is not allowed.
解决方案
问题出在你使用的是glad在线生成页面的URL(包含锚点#),而非直接的资源下载链接。CMake会将该URL对应的网页文件作为下载产物,处理时因文件名含#触发限制。解决步骤如下:
- 打开目标glad在线生成页面,点击页面中的Generate按钮完成代码生成。
- 在生成后的页面中,点击下载按钮获取实际的压缩包URL(格式类似
https://glad.dav1d.de/generated/glad-xxxx.zip)。 - 将CMakeLists.txt中的
URL替换为这个实际的下载链接,同时根据需求调整DOWNLOAD_NO_EXTRACT参数(通常需移除该参数,让CMake自动解压压缩包)。
调整后的示例代码:
if (NOT glad_FOUND) include(FetchContent) FetchContent_Declare( glad URL "https://glad.dav1d.de/generated/glad-xxxx.zip" # 可选:添加URL_HASH确保下载文件完整性,例如: # URL_HASH SHA256=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ) FetchContent_MakeAvailable(glad) endif()
内容的提问来源于stack exchange,提问作者Chu Chun
相关产品推荐
相关产品推荐

