【Qt】之【CMake】Error : The source.. does not match the soused

QT中cmak编译出现CMake Error: The source… does not match the soused

分析

前提是该项目是从另一个路径的项目复制过来的,编写代码时发现无论怎样修改代码,运行后都没有任何变化,以为是qtbug,重构重启都没用,最后打了断点,发现断点打在原路径的项目代码里了,看了构建(下图),发现红框路径是原路径项目的,但是就算在此处修改成现在的项目路径,也没用,删除了原路径的项目,也没用,运行后反而会自动创建在原路径。

在这里插入图片描述

原因

该项目是从其他地方复制过来的,原项目也没有删除,推测就算复制过来了编译某些配置也是保留了原路径吧

解决

当前项目与原路径的项目均删除,重新在该路径创建,编译运行可以了(不可取,本项目因为文件少代码少可以重创)

<think>好的,我现在要解决用户在CMake时遇到的错误:“source directory libmicrohttpd-0.9.77 does not contain CMakeLists.txt”。首先,我需要分析这个问题可能的原因。用户可能在构建过程中指定了错误的源目录,或者libmicrohttpd的源代码没有被正确下载或解压。 首先,常见的情况是用户下载了libmicrohttpd的源代码压缩包,解压后进入目录进行构建。但如果在运行cmake时路径指定错误,比如没有进入正确的子目录,或者压缩包内的结构导致CMakeLists.txt不在顶层目录,就会报这个错误。比如,有些项目解压后可能嵌套了一层版本号的目录,用户需要进入正确的子目录。 其次,用户可能直接从版本控制系统克隆仓库,但没有初始化子模块,导致缺失必要的文件,包括CMakeLists.txt。这时候需要检查是否使用了git submodule来管理依赖,是否有未初始化的子模块。 另外,也有可能用户下载的压缩包不完整,或者在解压过程中出现问题,导致CMakeLists.txt文件缺失。需要验证文件的完整性,比如检查SHA256校验和,或者重新下载源代码。 还可能用户错误地将构建目录指向了源代码的父目录,而实际源代码在子目录中。比如,假设源代码在libmicrohttpd-0.9.77子目录下,但用户直接在上级目录运行cmake,而没有指定正确的路径。 接下来,我需要逐步给出解决步骤。首先确认CMakeLists.txt是否存在。用户可以通过ls命令或者在文件管理器中查看该目录是否包含CMakeLists.txt。如果不存在,可能需要重新下载源代码或者检查解压过程。 如果文件确实存在,但CMake仍然报错,可能是路径问题。用户需要确保在运行cmake时指定的路径正确,比如使用绝对路径或者在正确的相对路径下执行命令。 另外,如果用户是通过add_subdirectory()在项目中使用libmicrohttpd作为子项目,需要确保路径配置正确,或者考虑使用find_package()来查找已安装的库。 最后,可能建议用户检查官方文档或社区中的类似问题,确认是否有特殊的构建步骤,例如需要先运行autogen.sh或configure脚本生成CMakeLists.txt,这在某些基于Autotools的项目中可能出现,但libmicrohttpd官方可能使用CMake作为构建系统,所以这种情况可能性较低,但也不排除。 总结可能的解决方案步骤:验证文件存在性、检查路径正确性、确保子模块初始化、重新下载源代码、参考官方构建指南。</think>要解决CMake报错“source directory libmicrohttpd-0.9.77 does not contain CMakeLists.txt”,可按照以下步骤排查: ### 1. 验证源代码完整性 - **检查文件是否存在**:确认解压后的目录中确实包含`CMakeLists.txt`文件。例如使用命令: ```bash ls libmicrohttpd-0.9.77/CMakeLists.txt ``` 若文件缺失,可能是下载或解压错误。建议重新下载并解压,注意解压时是否生成嵌套目录(如`libmicrohttpd-0.9.77/libmicrohttpd-0.9.77`)。 ### 2. 检查CMake命令路径 - **路径指定错误**:若使用`cmake libmicrohttpd-0.9.77`命令,需确保当前目录下存在该文件夹且包含`CMakeLists.txt`。建议使用绝对路径或确认相对路径正确: ```bash cmake /absolute/path/to/libmicrohttpd-0.9.77 ``` ### 3. 子模块初始化(若适用) - **Git子模块问题**:如果项目通过Git引用libmicrohttpd,需初始化子模块: ```bash git submodule update --init --recursive ``` ### 4. 构建目录与源码目录分离 - **推荐构建方式**:在源码目录外创建独立构建目录,避免路径混淆: ```bash mkdir build && cd build cmake ../libmicrohttpd-0.9.77 ``` ### 5. 替代方案:直接安装依赖 若libmicrohttpd是系统级依赖,建议通过包管理器安装后使用`find_package()`: ```cmake find_package(libmicrohttpd REQUIRED) target_link_libraries(your_target PRIVATE libmicrohttpd::libmicrohttpd) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值