使用conanfile.txt构建含gTest依赖的项目时遇到的Conan报错及CMake配置疑问
我来帮你一步步梳理这些问题哈:
关于conan build报错找不到conanfile.py的问题
conan build这个命令是专门为conanfile.py设计的,它默认会在当前目录查找这个文件,而你用的是conanfile.txt(纯依赖声明的简易配置文件),所以直接执行conan build .肯定会报错。而且你明确说不需要把自己的项目打包成Conan包,那完全没必要去写复杂的conanfile.py,换个构建方式就行。
关于CMake找不到GTest配置文件的解决办法
你提到的cmake --build --preset release其实就是最优解!因为你在conanfile.txt里用了CMakeToolchain生成器,Conan在执行conan install之后,会自动生成CMakePresets.json文件——这个文件里已经帮你把所有依赖的路径(包括GTest的GTestConfig.cmake)都配置好了,完全不需要手动修改CMAKE_PREFIX_PATH,也不用改动你的CMakeLists.txt。
完整的构建流程可以这样走:
- 先执行依赖安装(你的原命令没问题,也可以简化成带输出目录的版本):
conan install . mytests/1.0.0@ # 或者更清晰的写法:conan install . --output-folder=build --settings=build_type=Release - 直接用预设构建:
如果是Debug模式,就把cmake --build --preset releaserelease换成debug就行,完全不需要额外配置。
如果你想手动分步执行CMake命令,也可以用预设来初始化:
# 第一步:用预设配置CMake cmake --preset release # 第二步:构建项目 cmake --build build/Release
这样同样能正常找到GTest的配置文件,因为预设里已经包含了Conan生成的工具链和依赖路径,完全不会让你的CMakeLists.txt绑定本地Conan缓存的位置。
至于virtualrunenv生成器,它主要是用来生成脚本帮你设置运行时的环境变量(比如让系统找到依赖库的路径),但用CMake预设的方式构建后,测试程序通常已经能正常运行了,除非你有特殊的环境变量需求,否则一般不需要额外添加这个生成器。
总结
- 完全不需要写conanfile.py,你的
conanfile.txt已经能满足依赖管理的需求 - 放弃
conan build命令,改用CMake预设的方式构建,也就是你发现的cmake --build --preset release,这是最简洁且不侵入CMakeLists.txt的方案
备注:内容来源于stack exchange,提问作者evolved

