Re: [m-users.] Pass options to gcc compiler

Julien Fischer <[email protected]>
Newsgroups gmane.comp.lang.mercury.general
Message-ID <[email protected]>
On Wed, 16 Nov 2022, Sean Charles (emacstheviking) wrote:

> Final working solution in case it helps anybody but I doubt it as I am usually the stupidest person in the room:
> SDL2FLAGS=`pkg-config --cflags sdl2`
> SDL2LIBS=`pkg-config --libs sdl2`
> FLAGS=-s $(GRADE) -O4 -E --cflags "$(SDL2FLAGS)" $(SDL2LIBS) -lsdl2
> 
> Works fine, not sure why I had to do it this way now but as I say, there ain't no cure for stupid.

You had to do it that way because in general Mercury compiler flags and
C compiler flags are *not* the same thing.

Your FLAGS variable contains:

     -D_THREAD_SAFE -I/opt/homebrew/include -I/opt/homebrew/include/SDL2 -L/opt/homebrew/lib -lSDL2

For the Mercury compiler, -D does not define a C macro -- it's actually
an undocumented developer option.  Likewise, for mmc -I is a synonym
for --search-directories and that option affects where the Mercury
compiler searches for files, not the C compiler.  The mmc equivalent to
gcc's -I is --c-include-directory.

(-L and -l are equivalent for both mmc and gcc, but they're the
exception rather than the rule.)

Using --cflags to pass flags directly to the C compiler, as you have
done above, is one option.  (If you are grabbing pkg-config output, it's
probably the most convenient.)  Alternatively, you could use equivalent
mmc flags, e.g. --c-include-directory etc.

Finally, you could set the CFLAGS variable in a Mercury.options
file.  (Or indeed GCC_FLAGS if you have flags that you only want to pass
to GCC but not some other C compiler.)

Julien.
_______________________________________________
users mailing list
[email protected]
https://lists.mercurylang.org/listinfo/users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.