0

when I do C-h v and look up exec-path, I get the following:

("/usr/local/bin"
 "/usr/bin"
 "/bin"
 "/usr/local/games"
 "/usr/games"
 "/usr/lib/emacs/27.1/x86_64-linux-gnu"
 "/usr/local/cuda/bin")

However, when I try to run nvcc from M-x compile, it says "nvcc not found". If I give it the full path /usr/local/cuda/bin/nvcc, it works fine.

I thought having the path in exec-path is supposed to let me use nvcc, why is it not? Also, when I do M-! echo "$PATH", it prints

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

which is missing the last two elements of exec-path from above. Though I guess that's because exec-path takes precedence, so whatever. But in that case, why isn't the last element of exec-path "taking effect" in my case?

Note that when I go into an ordinary terminal (outside emacs) and do echo "$PATH", I get the following:

/usr/local/cuda-11.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

though it's less surprising that emacs didn't capture that path which was from .bashrc.

xdavidliu
  • 143
  • 8
  • 1
    Does this answer your question? [exec-path and $PATH](https://emacs.stackexchange.com/questions/550/exec-path-and-path) – mmmmmm May 28 '22 at 11:09
  • no, because that answer tells me to do the thing I've already tried and doesn't work: put the item in `exec-path`, while I need to set the `PATH` env variable to actually get it to work – xdavidliu May 28 '22 at 11:20
  • The first paragragh of the accepted answer does say "But if you run a command, it will inherit PATH, not exec-path, so subprocesses can find different commands than Emacs does." and comments on the issue – mmmmmm May 28 '22 at 11:23

2 Answers2

0

I had to do this in order to get nvcc to work from M-x compile.

(setenv "PATH" (concat "/usr/local/cuda/bin:" (getenv "PATH")))

I actually also reverted the changes to exec-path, as those didn't seem to matter one way or the other.

xdavidliu
  • 143
  • 8
0

The function 'compile' runs the command you give it in a shell.

The command is found by the shell through function start-file-process-shell-command and so the environment variable $PATH is the one that is used. Thus explaining whey your solution of adding "/usr/local/cuda/bin:" to PATH is needed.

See this answer for more

mmmmmm
  • 491
  • 1
  • 4
  • 19