У меня есть кроссплатформенный проект CMake, который отлично работает с make/gcc
на Linux и с MSVC
на винде. Я хотел дать 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
в подробном режиме я получаю ту же команду, кроме компилятора 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.
Задача ещё не решена.
Других решений пока нет …