我在vs2022中构建了一个qt cmake项目,一切正常,但是当最后一步运行exe时,它说缺少dll文件的错误。我知道这是dll文件目录的问题。我可以将它添加到系统环境路径,或者将 dll 复制到 exe 文件目录,但我猜想存在 not mucks system env 的其他方法。我注意到VS传统项目可以在属性中设置调试器环境,它设置本地环境变量,但我找不到在VS2022中的新支持CMake项目中设置它的方法。
IDE QtCreator 还提供了一种类似的方法,仅为运行 exe 文件的项目设置 env var,因此任何在 VS 中设置它的方法(如传统的 sln 项目),我搜索并发现一些配置 json 文件可能会有所帮助,但是我找不到精确的设置。
如上所述,我想存在一些方法可以设置exe运行时环境变量以在VS CMake项目中查找dll文件,任何人都可以给我任何提示,任何有用的建议将不胜感激!
终于找到了在Visual Studio中无解决方案的cmake项目的方法,
this查找
launch.vs.json
configurations
键中将以下内容添加到项目中: "env": {
"PATH": "<dll-file-path>"
}
它对我来说效果很好,希望这可以帮助你。
您可以将以下属性添加到包含可执行目标的
CMakeLists.txt
文件中:
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT <your_executable_target_name>)
set_property(TARGET <your_executable_target_name> PROPERTY VS_DEBUGGER_ENVIRONMENT "PATH=${QTDIR}/bin")
如果您需要独立于构建系统的解决方案,可以选择添加仅启动程序的自定义目标:
帮助脚本(run_program.cmake)
set(ENV{PATH} "${PATH}")
execute_process(COMMAND "${PROGRAM}")
实际项目
add_executable(MyProgram ...)
add_custom_target(RunMyProgram COMMAND ${CMAKE_COMMAND} -D "PROGRAM=$<TARGET_FILE:MyProgram>" -D "PATH=${QT_BINARY_DIR};$ENV{PATH}" -P ${CMAKE_CURRENT_SOURCE_DIR}/run_program.cmake)
这允许您使用例如
cmake --build build_dir --target RunMyProgram --config Release
构建后使用修改后的
PATH
环境变量运行程序。
另一种选择是使用
add_test
+ ctest,在修改器环境下运行程序,但这很容易导致真实的测试用例无法使用。
在 cmakesetting.json 文件中,在配置下添加键值:{"environments":"qt path;$penv{PATH}"},如下所示:
// cmakestting.json
{
"configurations":[
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
...
// run time environments
"environments": [ { "PATH": "C:\\local\\Qt\\Qt6.5.3\\bin;$penv{PATH}" } ]
...
]
}