【发布时间】:2019-01-11 21:51:42
【问题描述】:
我创建了一个非常简单的 C++/CMake 项目:
CMakeLists.txt(注意-MD 标志):
cmake_minimum_required(VERSION 3.10 FATAL_ERROR)
add_executable(moop main.cc)
target_compile_options(moop PRIVATE -MD)
main.cc:
#include "moop.hh"
int main( int, char** ) { return 0; }
moop.hh:
#pragma once
从项目根目录,我运行以下命令:
mkdir build && cd build
cmake -G Ninja -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
cat compile_commands.json
cat compile_commands.json 输出(注意-MD 标志):
{
"directory": "/home/zbardoo/moop/build",
"command": "/usr/bin/clang++ -MD -o CMakeFiles/moop.dir/main.cc.o -c /home/zbardoo/moop/main.cc",
"file": "/home/zbardoo/moop/main.cc"
}
如果我随后运行ninja,则可执行文件moop 已成功构建。但是,moop.cc.d 无处可寻。但是,如果我随后从 compile_commands.json 复制并粘贴 command 值并运行它:
/usr/bin/clang++ -MD -o CMakeFiles/moop.dir/main.cc.o -c /home/zbardoo/moop/main.cc
文件/home/zbardoo/moop/build/CMakeFiles/moop.dir/main.cc.d出现:
zbardoo@localhost:~/moop/build$ cat CMakeFiles/moop.dir/main.cc.d
CMakeFiles/moop.dir/main.cc.o: /home/zbardoo/moop/main.cc \
/home/zbardoo/moop/moop.hh
为什么ninja 不遵守compile_commands.json 文件中的-MD 标志?
【问题讨论】: