@@ -212,6 +212,10 @@ impl Config {
212
212
}
213
213
214
214
/// Sets the build-tool generator (`-G`) for this compilation.
215
+ ///
216
+ /// If unset, this crate will use the `CMAKE_GENERATOR` environment variable
217
+ /// if set. Otherwise, it will guess the best generator to use based on the
218
+ /// build target.
215
219
pub fn generator < T : AsRef < OsStr > > ( & mut self , generator : T ) -> & mut Config {
216
220
self . generator = Some ( generator. as_ref ( ) . to_owned ( ) ) ;
217
221
self
@@ -418,6 +422,12 @@ impl Config {
418
422
t
419
423
}
420
424
} ;
425
+
426
+ let mut generator = self
427
+ . generator
428
+ . clone ( )
429
+ . or_else ( || std:: env:: var_os ( "CMAKE_GENERATOR" ) ) ;
430
+
421
431
let host = self . host . clone ( ) . unwrap_or_else ( || getenv_unwrap ( "HOST" ) ) ;
422
432
let msvc = target. contains ( "msvc" ) ;
423
433
let ndk = self . uses_android_ndk ( ) ;
@@ -488,15 +498,15 @@ impl Config {
488
498
489
499
cmd. arg ( & self . path ) . current_dir ( & build) ;
490
500
let mut is_ninja = false ;
491
- if let Some ( ref generator) = self . generator {
501
+ if let Some ( ref generator) = generator {
492
502
is_ninja = generator. to_string_lossy ( ) . contains ( "Ninja" ) ;
493
503
}
494
504
if target. contains ( "windows-gnu" ) {
495
505
if host. contains ( "windows" ) {
496
506
// On MinGW we need to coerce cmake to not generate a visual
497
507
// studio build system but instead use makefiles that MinGW can
498
508
// use to build.
499
- if self . generator . is_none ( ) {
509
+ if generator. is_none ( ) {
500
510
// If make.exe isn't found, that means we may be using a MinGW
501
511
// toolchain instead of a MSYS2 toolchain. If neither is found,
502
512
// the build cannot continue.
@@ -547,11 +557,11 @@ impl Config {
547
557
// otherwise we won't get 32/64 bit correct automatically.
548
558
// This also guarantees that NMake generator isn't chosen implicitly.
549
559
let using_nmake_generator;
550
- if self . generator . is_none ( ) {
560
+ if generator. is_none ( ) {
551
561
cmd. arg ( "-G" ) . arg ( self . visual_studio_generator ( & target) ) ;
552
562
using_nmake_generator = false ;
553
563
} else {
554
- using_nmake_generator = self . generator . as_ref ( ) . unwrap ( ) == "NMake Makefiles" ;
564
+ using_nmake_generator = generator. as_ref ( ) . unwrap ( ) == "NMake Makefiles" ;
555
565
}
556
566
if !is_ninja && !using_nmake_generator {
557
567
if target. contains ( "x86_64" ) {
@@ -594,7 +604,7 @@ impl Config {
594
604
cmd. arg ( "-DCMAKE_OSX_DEPLOYMENT_TARGET=" ) ;
595
605
}
596
606
}
597
- if let Some ( ref generator) = self . generator {
607
+ if let Some ( ref generator) = generator {
598
608
cmd. arg ( "-G" ) . arg ( generator) ;
599
609
}
600
610
let profile = self . get_profile ( ) ;
@@ -654,7 +664,7 @@ impl Config {
654
664
//
655
665
// Note that for other generators, though, this *overrides*
656
666
// things like the optimization flags, which is bad.
657
- if self . generator . is_none ( ) && msvc {
667
+ if generator. is_none ( ) && msvc {
658
668
let flag_var_alt = format ! ( "CMAKE_{}_FLAGS_{}" , kind, build_type_upcase) ;
659
669
if !self . defined ( & flag_var_alt) {
660
670
let mut flagsflag = OsString :: from ( "-D" ) ;
@@ -745,7 +755,7 @@ impl Config {
745
755
let mut parallel_flags = None ;
746
756
747
757
if let Ok ( s) = env:: var ( "NUM_JOBS" ) {
748
- match self . generator . as_ref ( ) . map ( |g| g. to_string_lossy ( ) ) {
758
+ match generator. as_ref ( ) . map ( |g| g. to_string_lossy ( ) ) {
749
759
Some ( ref g) if g. contains ( "Ninja" ) => {
750
760
parallel_flags = Some ( format ! ( "-j{}" , s) ) ;
751
761
}
0 commit comments