Dies ist eine Vorlage, die Ihnen hilft, ein Problem zu erstellen, das so schnell wie möglich bearbeitet werden kann. Fühlen Sie sich frei, zusätzliche Informationen hinzuzufügen oder nicht relevante Punkte zu entfernen, wenn Sie diese nicht benötigen.
Wenn Sie eine Frage haben, anstatt einen Fehler zu melden, gehen Sie bitte zu http://answers.opencv.org, wo Sie viel schneller Antworten erhalten.
Compiler & CMake: MSVC 120 & CMake 3.5
CMakeLists.txt
Build erfolgreich
LINK: Schwerwiegender Fehler LNK1104: Datei 'Files\NVIDIA.obj' kann nicht geöffnet werden
Diese Zeile unterbricht den Build mit Ninja unter Windows. Ich denke die Zeile sollte lauten:
# this
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} ${CMAKE_LIBRARY_PATH_FLAG}$<SHELL_PATH:${p}>)
# instead of that
# set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p})
Aber auch bei dieser Änderung scheitert der Build an den Leerzeichen im Pfad, die Ninja nicht mag. Vielleicht sollte $<SHELL_PATH:...>
einen kurzen Pfad zurückgeben, aber das ist ein CMake-Problem.
Als Workaround kann man verwenden:
if(NOT CMAKE_GENERATOR MATCHES "Ninja" AND NOT MSVC)
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} -L${p})
endif()
Dieses Problem betrifft auch konsumierende Projekte, da die Link-Flags in den OpenCVModules*.cmake
Dateien landen.
Ich finde Ninja viel schneller als msbuild unter Windows, insbesondere beim Erstellen mit CUDA, daher wäre es schön, wenn OpenCV diesen Generator auch unterstützen würde.
Ein verwandtes Problem zum CMake-Bugtracker gepostet: https://cmake.org/Bug/view.php?id=16053
Sie können die Option /maxcpucount
mit msbuild verwenden, um den Build-Prozess zu beschleunigen. Das Beispiel für 4-Kern-CPU:
.cmd
cmake --build . --config release -- /maxcpucount:5
@mshabunin mit Respekt, aber das maxcpucount
hat wirklich nichts mit der parallelen Kompilierung von Übersetzungseinheiten zu tun.