git/list[1] front-page[2] threads[3] people[4] search[5] about
 

On overriding make variables from the environment...

From
SZEDER Gábor <szeder.dev@gmail.com>
Date
Oct 16, 2018, 18:45 UTC
Message-ID
<20181016184537.GN19800@szeder.dev>
Our Makefile has lines like these:
  CFLAGS = -g -O2 -Wall
  CC = cc
  AR = ar
  SPATCH = spatch

Note the use of '=', not '?='. This means that these variables can be overridden from the command line, i.e. 'make CC=gcc-X.Y' will build with that particular GCC version, but not from the environment, i.e. 'CC=gcc-X.Y make' will still build with 'cc'.

This can be confusing for developers who come from other projects where they used to run 'CC=whatever make'.

And our build jobs on Travis CI are badly affected by this. We have dedicated build jobs to build Git with GCC and Clang both on Linux and OSX from the very beginning (522354d70f (Add Travis CI support, 2015-11-27)). But guess how Travis CI specifies which compiler to use! With 'export CC=gcc' and 'export CC=clang', respectively. Consequently, our Clang Linux build job has always used gcc, because that's where 'cc' points at on Linux by default, while the GCC OSX build job has always used Clang. Oh, well. Furthermore, see 37fa4b3c78 (travis-ci: run gcc-8 on linux-gcc jobs, 2018-05-19), where Duy added an 'export CC=gcc-8' in an attempt to use a more modern compiler, but this had no effect either.

I'm not sure what to do. I'm fine with updating our 'ci/' scripts to explicitly respect CC in the environment (either by running 'make CC=$CC' or by writing $CC into 'config.mak'). Or I could update our Makefile to use '?=' for specific variables, but:

  - I'm afraid to break somebody's setup relying on the current
    behavior and CC having different values in the environment and in
    'config.mak'.
  - Where to stop, IOW which variables should be set with '?='?
    CFLAGS, LDFLAGS, CC, AR, ..., SPATCH, SPATCH_FLAGS?  Dunno.  We
    already have 'STRIP ?= strip' and there are variables that are
    checked explicitly (e.g. 'DEVELOPER=y make' works).
    Note also that prior to b05701c5b4 (Make CFLAGS overridable from
    make command line., 2005-08-06) our Makefile used 'CC?=gcc' as
    well.
Next: Jonathan Nieder
Message 1 of 33 in “On overriding make variables from the environment...”
  1. SZEDER GáborOct 16, 2018
  2. Jonathan NiederOct 16, 2018
  3. SZEDER GáborOct 16, 2018
  4. Jonathan NiederOct 16, 2018
  5. SZEDER GáborOct 17, 2018
  6. Johannes SchindelinOct 18, 2018
  7. Junio C HamanoOct 18, 2018
  8. 0/5 travis-ci: build with the right compilerSZEDER Gábor, Dec 20, 2018
  9. 1/5 compat/obstack: fix -Wcast-function-type warningsSZEDER Gábor, Dec 20, 2018
  10. Ævar Arnfjörð BjarmasonDec 20, 2018
  11. Junio C HamanoJan 10, 2019
  12. SZEDER GáborJan 11, 2019
  13. Junio C HamanoJan 11, 2019
  14. SZEDER GáborJan 11, 2019
  15. SZEDER GáborJan 15, 2019
  16. Jonathan NiederJan 16, 2019
  17. SZEDER GáborJan 17, 2019
  18. Junio C HamanoJan 16, 2019
  19. 2/5 .gitignore: ignore external debug symbols from GCC on macOSSZEDER Gábor, Dec 20, 2018
  20. 3/5 travis-ci: don't be '--quiet' when running the testsSZEDER Gábor, Dec 20, 2018
  21. 5/5 travis-ci: build with the right compilerSZEDER Gábor, Dec 20, 2018
  22. Johannes SchindelinJan 3, 2019
  23. 4/5 travis-ci: switch to Xcode 10.1 macOS imageSZEDER Gábor, Dec 20, 2018
  24. 0/5 travis-ci: build with the right compilerSZEDER Gábor, Jan 17, 2019
  25. 1/5 compat/obstack: fix -Wcast-function-type warningsSZEDER Gábor, Jan 17, 2019
  26. 2/5 .gitignore: ignore external debug symbols from GCC on macOSSZEDER Gábor, Jan 17, 2019
  27. 3/5 travis-ci: don't be '--quiet' when running the testsSZEDER Gábor, Jan 17, 2019
  28. Johannes SchindelinJan 17, 2019
  29. 4/5 travis-ci: switch to Xcode 10.1 macOS imageSZEDER Gábor, Jan 17, 2019
  30. 5/5 travis-ci: build with the right compilerSZEDER Gábor, Jan 17, 2019
  31. Johannes SchindelinJan 17, 2019
  32. SZEDER GáborJan 17, 2019
  33. Johannes SchindelinJan 18, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.