| --- |
| 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') |
| ``` |