3 # Matthias Jahn jahn dôt matthias ât freenet dôt de 2007 (pmarat)
6 Try to detect a C++ compiler from the list of supported compilers (g++, msvc, etc)::
9 opt.load('compiler_cxx')
11 cnf.load('compiler_cxx')
13 bld.program(source='main.cpp', target='app')
15 The compilers are associated to platforms in :py:attr:`waflib.Tools.compiler_cxx.cxx_compiler`. To register
16 a new C++ compiler named *cfoo* (assuming the tool ``waflib/extras/cfoo.py`` exists), use::
18 from waflib.Tools.compiler_cxx import cxx_compiler
19 cxx_compiler['win32'] = ['cfoo', 'msvc', 'gcc']
22 opt.load('compiler_cxx')
24 cnf.load('compiler_cxx')
26 bld.program(source='main.c', target='app')
28 Not all compilers need to have a specific tool. For example, the clang compilers can be detected by the gcc tools when using::
30 $ CXX=clang waf configure
35 from waflib
.Tools
import ccroot
36 from waflib
import Utils
37 from waflib
.Logs
import debug
40 'win32': ['msvc', 'g++', 'clang++'],
42 'darwin': ['clang++', 'g++'],
43 'aix': ['xlc++', 'g++', 'clang++'],
44 'linux': ['g++', 'clang++', 'icpc'],
45 'sunos': ['sunc++', 'g++'],
49 'gnu': ['g++', 'clang++'],
50 'java': ['g++', 'msvc', 'clang++', 'icpc'],
51 'default': ['clang++', 'g++']
54 Dict mapping the platform names to Waf tools finding specific C++ compilers::
56 from waflib.Tools.compiler_cxx import cxx_compiler
57 cxx_compiler['linux'] = ['gxx', 'icpc', 'suncxx']
60 def default_compilers():
61 build_platform
= Utils
.unversioned_sys_platform()
62 possible_compiler_list
= cxx_compiler
.get(build_platform
, cxx_compiler
['default'])
63 return ' '.join(possible_compiler_list
)
67 Detects a suitable C++ compiler
69 :raises: :py:class:`waflib.Errors.ConfigurationError` when no suitable compiler is found
72 test_for_compiler
= conf
.options
.check_cxx_compiler
or default_compilers()
73 except AttributeError:
74 conf
.fatal("Add options(opt): opt.load('compiler_cxx')")
76 for compiler
in re
.split('[ ,]+', test_for_compiler
):
78 conf
.start_msg('Checking for %r (C++ compiler)' % compiler
)
81 except conf
.errors
.ConfigurationError
as e
:
84 debug('compiler_cxx: %r', e
)
87 conf
.end_msg(conf
.env
.get_flat('CXX'))
88 conf
.env
.COMPILER_CXX
= compiler
94 conf
.fatal('could not configure a C++ compiler!')
98 This is how to provide compiler preferences on the command-line::
100 $ waf configure --check-cxx-compiler=gxx
102 test_for_compiler
= default_compilers()
103 opt
.load_special_tools('cxx_*.py')
104 cxx_compiler_opts
= opt
.add_option_group('Configuration options')
105 cxx_compiler_opts
.add_option('--check-cxx-compiler', default
=None,
106 help='list of C++ compilers to try [%s]' % test_for_compiler
,
107 dest
="check_cxx_compiler")
109 for x
in test_for_compiler
.split():