我有一个跨平台的 CMake 项目,可以make/gcc
在 Linux 和MSVC
Windows 上完美运行。我想ninja
试一试并将其与make
. 这就是我创建ninja
项目的方式:
cmake -GNinja ../Source/
然后我跑
ninja
但它失败了这个错误
/usr/bin/c++ -DmyPreprocessors ... -ImyIncludes ... -g3 -o0 -m32 -MMD -MT CMakeFiles/myProj.dir/myCode.cpp.o -MF CMakeFiles/myProj.dir/myCode.cpp.o.d -o CMakeFiles/myProj.dir/myCode.cpp.o -c /path/to/myCode.cpp
cc1plus: fatal error: CMakeFiles/myProj.dir/myCode.cpp.d: No such file or directory
当我检查CMakeFiles/myProj.dir/
没有myCode.cpp.d
文件时。
但是当我将编译器更改为clang
一切神奇的工作时!Ninja 开始编译,然后成功链接。
当我ninja
以详细模式运行时,我得到完全相同的命令,除了编译器是clang
( /usr/bin/c++
=> /usr/bin/clang++-3.9
)。
这里发生了什么?
编辑:
这是我用来重现相同错误的示例 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.5)
project(randomProj)
set(SOURCE_FILES myFile.cpp)
include_directories(Generic)
set(EXECUTABLE "TEST")
add_executable(${EXECUTABLE} ${SOURCE_FILES})
set(LIBRARY_SEARCH_PATH ${CMAKE_SOURCE_DIR}/path/to/my/libs)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w -g3 -o0")
target_link_libraries(${EXECUTABLE} ${LIBRARIES})
我myFile.cpp
的是这样的:
int main(){}
我没有为gcc
. 但是,clang
我只是导出CC
和CXX
标志:
export CC=clang-3.9
export CXX=clang++-3.9
然后我打电话给cmake。