如何在CMake脚本中设置PATH环境变量?

21

我想使用未在系统PATH中的Mingw编译器构建我的源代码。 我尝试了在脚本开头添加以下内容:

set(Env{PATH} "c:/MyProject/Tools/mingw/bin/" "c:/MyProject/Tools/mingw/msys/1.0/bin/")

还有这个:

set(CMAKE_PROGRAM_PATH "c:/MyProject/Tools/mingw/bin/"   "c:/MyProject/Tools/mingw/msys/1.0/bin/")
set(CMAKE_LIBRARY_PATH "c:/MyProject/Tools/mingw/bin/" "c:/MyProject/Tools/mingw/msys/1.0/bin/")
set(CMAKE_SYSTEM_PROGRAM_PATH "c:/MyProject/Tools/mingw/bin/" "c:/MyProject/Tools/mingw/msys/1.0/bin/")
set(CMAKE_SYSTEM_PREFIX_PATH "c:/MyProject/Tools/mingw/bin/" "c:/MyProject/Tools/mingw/msys/1.0/bin/")

第一种方案根本不起作用。建议我无法在CMake脚本中覆盖环境变量的值。 第二个脚本找到了我的mingw编译器,但是在运行gcc时会出现错误(找不到gcc所需的libgmp-10.dll)。这是因为PATH变量没有设置为我的Mingw。


在 Windows 上,使用 CMake 3.25.2 中的 工具链文件 在初始配置/生成阶段中将 /path/to/mingw 添加到 ENV{PATH} 可以正常工作:set(ENV{PATH} "/path/to/mingw;$ENV{PATH}")。然而,在后续的 Ninja 调用中编译器无法运行 :( - genpfault
3个回答

22

CMAKE_SYSTEM_PROGRAM_PATH不应被修改,使用

LIST(APPEND CMAKE_PROGRAM_PATH  "c:/MyProject/Tools/mingw/bin/" ...)

3
看起来这个程序没有操作 PATH 环境变量!如果你使用依赖于给定路径中 DLL 文件的程序调用自定义命令,那么这些 DLL 文件将无法被找到。 - Benjamin Buch

4

即使您不像本例中从Linux交叉编译到Windows一样进行交叉编译,也可以将其视为交叉编译工具链:

http://www.vtk.org/Wiki/CmakeMingw

在按照该指南操作后,在调用cmake时,您需要在命令行上设置mingw工具链:

~/src/helloworld/ $ mkdir build
~/src/helloworld/ $ cd build
~/src/helloworld/build/ $ cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-mingw32.cmake

如果你经常使用这个命令,你可以创建一个别名来避免每次重新生成makefile时输入那个不太好看的-D选项:

alias mingw-cmake='cmake -DCMAKE_TOOLCHAIN_FILE=~/Toolchain-mingw32.cmake'

1
这并没有真正解决问题。只有在mingw的bin文件夹已经在系统路径中时,工具链文件才能起作用。 - João Portela

-5
编写一个脚本文件来启动CMake。
在Windows上制作一个批处理文件:
@echo off
set path=c:\MyProject\Tools\mingw\bin;c:\MyProject\Tools\mingw\msys\1.0\bin
"C:\Program Files\CMake 2.8\bin\cmake-gui.exe"

在Linux上创建一个bash脚本:
export PATH=$PATH:/your/path

3
您可以在脚本中使用 setlocal 来自动撤销批处理文件退出时对路径所做的更改(如果需要的话)。还有环境变量 ProgramFiles(x86)ProgramFiles,应该代替硬编码的 C:\Program Files - doug65536

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接