Thank you for your reply. I added questions/remarks bellow. Yuri Khan writes: > 1. I have a Dockerfile or several that describes the build > environment. If necessary, a different one that describes the > runtime/debugging environment. > > 2. I have a docker-compose.yml which utilizes the image(s) built from > Dockerfile(s) of step 1, and mounts the source tree, the build > directory, etc into service containers. The compose file also arranges > for the services to run as my user ID so that I don’t get root-owned > files in my build tree. > > The purpose of the compose file is to remember all the docker run > options for me so that I don’t have to specify them every time. I > could alternatively use shell scripts. > > 3. I also have a Makefile that encapsulates the build logic. In some > targets, it arranges for itself to execute in a service container > (with a different target). The purpose of the Makefile is that I could > run it either from Emacs or from local shell if I so desire. > > 4. .dir-locals.el to tell Emacs to use ‘docker-compose run --rm > runtime gdb’ as my debugger and ‘docker-compose run --rm builder > clangd’ as my language server, and ‘make build test’ as my compile > command. Seems a good way to do it. I haven't think about the language server. How do you configure the container ? > Where practical, I prefer to mount my volumes at the same paths in the > container as locally, this simplifies the mapping a lot. But in some > cases I hook ‘compilation-filter’ to a function that replaces > prefixes. I'm very curious about your compilation filter. Can you share it ? Best regards ------- Gendre Sébastien