| --- | |
| short-description: Adding compiler arguments | |
| ... | |
| # Adding arguments | |
| Often you need to specify extra compiler arguments. Meson provides two | |
| different ways to achieve this: global arguments and per-target | |
| arguments. | |
| Global arguments | |
| -- | |
| Global compiler arguments are set with the following command. As an | |
| example you could do this. | |
| ```meson | |
| add_global_arguments('-DFOO=bar', language : 'c') | |
| ``` | |
| This makes Meson add the define to all C compilations. Usually you | |
| would use this setting for flags for global settings. Note that for | |
| setting the C/C++ language standard (the `-std=c99` argument in GCC), | |
| you would probably want to use a default option of the [[project]] | |
| function. For details see the [reference manual](Reference-manual.md). | |
| Global arguments have certain limitations. They all have to be defined | |
| before any build targets are specified. This ensures that the global | |
| flags are the same for every single source file built in the entire | |
| project with one exception. Compilation tests that are run as part of | |
| your project configuration do not use these flags. The reason for that | |
| is that you may need to run a test compile with and without a given | |
| flag to determine your build setup. For this reason tests do not use | |
| these global arguments. | |
| You should set only the most essential flags with this setting, you | |
| should *not* set debug or optimization flags. Instead they should be | |
| specified by selecting an appropriate build type. | |
| Project arguments | |
| -- | |
| Project arguments work similar to global arguments except that they | |
| are valid only within the current subproject. The usage is simple: | |
| ```meson | |
| add_project_arguments('-DMYPROJ=projname', language : 'c') | |
| ``` | |
| This would add the compiler flags to all C sources in the current | |
| project. | |
| Per target arguments | |
| -- | |
| Per target arguments are just as simple to define. | |
| ```meson | |
| executable('prog', 'prog.cc', cpp_args : '-DCPPTHING') | |
| ``` | |
| Here we create a C++ executable with an extra argument that is used | |
| during compilation but not for linking. | |
| You can find the parameter name for other languages in the [reference | |
| tables](Reference-tables.md). | |
| Specifying extra linker arguments is done in the same way: | |
| ```meson | |
| executable('prog', 'prog.cc', link_args : '-Wl,--linker-option') | |
| ``` |