рдореИрдВ рдирд┐рдВрдЬрд╛ рдХреА COMPDB рдкреАрдврд╝реА рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдХреЗрд╡рд▓ [\n]
рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реИрдз-рд╕реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?
рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдВрдЬрд╛ рд╕рдВрд╕реНрдХрд░рдг 1.8.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдореИрдВ рднреА рдЗрд╕ рдЙрдкрдХрд░рдг рд╕реЗ рднреНрд░рдорд┐рдд рд╣реВрдБред рдореБрдЭреЗ cc cxx рдЬреИрд╕реЗ рдирд┐рдпрдо рдирд╛рдо рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕реЗ рд╣рд░ рдирд┐рдпрдо рдХреЛ рдбрдВрдк рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕рд▓рд┐рдПред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдпрд╛ рд╕реАрдПрдордХреЗ, рд▓реЗрдХрд┐рди рдЬрдм рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реАрдПрдордХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдпрдо рдирд╛рдо рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдмрд╛рд░реЛрдХ рдФрд░ рднрд░рдкреВрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрди рд╕рднреА рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЕрдкрдиреЗ рдЙрдмрдВрдЯреВ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ,
--- ninja-build-1.7.2.orig/src/ninja.cc
+++ ninja-build-1.7.2/src/ninja.cc
@@ -638,20 +638,36 @@ int NinjaMain::ToolCompilationDatabase(c
e != state_.edges_.end(); ++e) {
if ((*e)->inputs_.empty())
continue;
- for (int i = 0; i != argc; ++i) {
- if ((*e)->rule_->name() == argv[i]) {
- if (!first)
- putchar(',');
- printf("\n {\n \"directory\": \"");
- EncodeJSONString(&cwd[0]);
- printf("\",\n \"command\": \"");
- EncodeJSONString((*e)->EvaluateCommand().c_str());
- printf("\",\n \"file\": \"");
- EncodeJSONString((*e)->inputs_[0]->path().c_str());
- printf("\"\n }");
+ if (argc == 0) {
+ if (!first)
+ putchar(',');
- first = false;
+ printf("\n {\n \"directory\": \"");
+ EncodeJSONString(&cwd[0]);
+ printf("\",\n \"command\": \"");
+ EncodeJSONString((*e)->EvaluateCommand().c_str());
+ printf("\",\n \"file\": \"");
+ EncodeJSONString((*e)->inputs_[0]->path().c_str());
+ printf("\"\n }");
+
+ first = false;
+ } else {
+ for (int i = 0; i != argc; ++i) {
+ if ((*e)->rule_->name() == argv[i]) {
+ if (!first)
+ putchar(',');
+
+ printf("\n {\n \"directory\": \"");
+ EncodeJSONString(&cwd[0]);
+ printf("\",\n \"command\": \"");
+ EncodeJSONString((*e)->EvaluateCommand().c_str());
+ printf("\",\n \"file\": \"");
+ EncodeJSONString((*e)->inputs_[0]->path().c_str());
+ printf("\"\n }");
+
+ first = false;
+ }
}
}
}
рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдХрднреА рднреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХреА, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдПрдордХреЗ рд╕рдВрдХрд▓рди рдЖрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдЕрдкрдирд╛ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕реЗ рд╣рд░ рдЙрд╕ рдирд┐рдпрдо рдХреЛ рдбрдВрдк рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдХреЗрд╡рд▓ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдлреЙрд▓рдмреИрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдореБрдЭреЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ https://github.com/ninja-build/ninja/issues/1024#issuecomment -178885017 рдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред
рдЬреА рдмреЛрд▓рд┐рдпреЗ.....
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рднреА рдЗрд╕ рдЙрдкрдХрд░рдг рд╕реЗ рднреНрд░рдорд┐рдд рд╣реВрдБред рдореБрдЭреЗ cc cxx рдЬреИрд╕реЗ рдирд┐рдпрдо рдирд╛рдо рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рд╡реЗ рдореМрдЬреВрдж рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореБрдЭреЗ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕реЗ рд╣рд░ рдирд┐рдпрдо рдХреЛ рдбрдВрдк рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП рдЗрд╕рд▓рд┐рдПред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдпрд╛ рд╕реАрдПрдордХреЗ, рд▓реЗрдХрд┐рди рдЬрдм рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реАрдПрдордХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдпрдо рдирд╛рдо рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдмрд╛рд░реЛрдХ рдФрд░ рднрд░рдкреВрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрди рд╕рднреА рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЧреИрд░-рд╕реНрдЯрд╛рд░реНрдЯрд░ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЕрдкрдиреЗ рдЙрдмрдВрдЯреВ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ,
рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреА рдХрднреА рднреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХреА, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдПрдордХреЗ рд╕рдВрдХрд▓рди рдЖрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдЕрдкрдирд╛ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрд░реЛрдХреНрдд рдЖрдкрдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред