Ubuntu下使用Ninja构建C++项目报错:build.ninja:6: expected 'command =' line
Ubuntu下使用Ninja构建C++项目报错:build.ninja:6: expected 'command =' line
嗨,我看了你遇到的这个Ninja构建报错问题,咱们一步步来排查解决:
首先说问题的根源:从你用cat -A输出的文件内容能明确看到,第6行(也就是rule cxx下面的command定义行)里用了&&——这是HTML转义后的字符,而Ninja完全不认识这个,它只认原生的Shell逻辑运算符&&。这就导致Ninja没办法把这一行识别成有效的command =定义,所以直接抛出了那个报错。
接下来是具体的修复步骤:
- 打开你的
build.ninja文件(用Sublime Text或者其他编辑器都可以) - 找到
rule cxx块里的那行command,把里面的&&替换成正常的&& - 保存文件后,重新运行
ninja命令就行
修复后的完整build.ninja内容应该是这样的:
cxx = g++ cxxflags = -std=c++20 -Wall -Wextra builddir = build rule cxx command = mkdir -p $builddir && $cxx $cxxflags -c $in -o $out description = Compiling $in rule link command = $cxx $in -o $out description = Linking $out build $builddir/hello.o: cxx hello.cpp build app: link $builddir/hello.o default app
你还可以用cat -A build.ninja再验证一遍,确保替换后的command行是:^Icommand = mkdir -p $builddir && $cxx $cxxflags -c $in -o $out$
(这里的^I是tab缩进,你的文件里已经用了正确的tab缩进,Ninja要求rule下的子项必须用tab,这部分不用改)
最后说下为什么会踩这个坑:大概率是你在Sublime Text编辑的时候,不小心输入了HTML转义字符,或是从某个网页复制代码的时候带过来的。Ninja对语法的要求特别严格,这种非原生的Shell符号会直接让它解析失败,以后编辑构建文件的时候多注意下这类细节就行~
备注:内容来源于stack exchange,提问作者user3459138
相关产品推荐
相关产品推荐

