CMake哈希在文件名

时间:2018-06-27 22:42:56

标签: makefile cmake

当我的cpp文件名中包含哈希/磅/尖峰(#)时,我会收到类似于

的错误
Makefile:22669: warning: overriding recipe for target '.PHONY'
Makefile:22660: warning: ignoring old recipe for target '.PHONY'
Makefile:22678: warning: overriding recipe for target '.PHONY'
Makefile:22669: warning: ignoring old recipe for target '.PHONY'
Makefile:32887: *** missing separator.  Stop.

即使生成的Makefile似乎只有178行。除了在文件名中不使用#字符以外,还有什么方法可以防止这种情况?
编辑:seimicolons(;)似乎也引起了这个问题

2 个答案:

答案 0 :(得分:0)

“#”是make中的注释。几乎100%可以确定CMake在生成Makefile时没有正确转义“#”字符。

关于为什么看到这些错误行号的原因,CMake会生成大量的makefile并递归调用它们。您在“根”目录中看到的文件可能只是一个顶层makefile,它执行的并不多。您必须在CMakeFiles子目录中查找其他makefile。如果您对CMake生成的文件运行“ make VERBOSE = 1”,则可以跟踪所调用的子make。同样,如果您查看“进入目录”消息进行打印,则可能可以弄清楚正在谈论哪个Makefile。

不过,简短的答案是,您将无法在文件名中使用特殊字符,例如“#”,“ $”,空格,“:”等。

答案 1 :(得分:0)

我在 CMake 生成的文件中遇到了类似的问题,文件名中包含未转义的 #,导致:

====================[ Build | MyAppDebug | Debug ]==========================
/Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build /Users/<user>/MyApp/cmake-build-debug --target MyAppDebug -- -j 8
CMakeFiles/MyAppDebug.dir/build.make:4112: *** missing separator.  Stop.
make[2]: *** [CMakeFiles/MyAppDebug.dir/all] Error 2
make[1]: *** [CMakeFiles/MyAppDebug.dir/rule] Error 2
make: *** [MyAppDebug] Error 2

对我来说,这是在 CMake 1.18.0 版中修复的。 (在 macOSX 上)所以我将此添加到我的 CMake 文件中:

cmake_minimum_required(VERSION 3.18)