2017-10-09 8 views
0

Ich bin nicht vertraut mit Makefile und CMake, ich möchte dieses Makefile von Drittanbietern zu CMakeList.txt konvertieren, so dass dieser 3rd-Party-Code mit neuesten DLib-Code kompilieren kann, aber ich habe keine Ahnung, wie.Wie konvertiert man dieses Makefile in CMakeList.txt?

Ich weiß nur ein paar grundlegende CMake-Befehl, aber diese Datei hat viele Flags und Befehlsoptionen, ich fühle mich jetzt sehr ahnungslos.

CXX = g++ 

CXXFLAGS = -g -I./include -I./src/dlib/all/source.cpp -ljpeg -mavx -lm -lpthread -lX11 -DDLIB_HAVE_BLAS -DNDEBUG -DDLIB_JPEG_SUPPORT -DDLIB_HAVE_AVX -O3 `pkg-config --cflags opencv ` 

LDFLAGS = -ljpeg -mavx -lm -lpthread -lX11 `pkg-config --libs opencv` -DDLIB_HAVE_BLAS -DNDEBUG -DDLIB_JPEG_SUPPORT -DDLIB_HAVE_AVX -O3 

all: bin/oic 

bin/oic: obj/dlib.o obj/faceDetection.o obj/pupilDetection.o obj/kalmanFilters.o obj/util.o obj/oic.o 
    $(CXX) -o [email protected] $^ $(LDFLAGS) 

# Should use findpackage(DLib) instead 
#obj/dlib.o: ./src/dlib/all/source.cpp 
#obj/dlib.o: ../../Dlib/dlib-19.7/dlib/all/source.cpp 
# mkdir -p obj bin 
# $(CXX) -c $(CXXFLAGS) -o [email protected] $< 

obj/faceDetection.o: ./src/faceDetection.cpp 
    $(CXX) -c $(CXXFLAGS) -o [email protected] $< 

obj/pupilDetection.o: ./src/pupilDetection.cpp 
    $(CXX) -c $(CXXFLAGS) -o [email protected] $< 

obj/kalmanFilters.o: ./src/kalmanFilters.cpp 
    $(CXX) -c $(CXXFLAGS) -o [email protected] $< 

obj/util.o: ./src/util.cpp 
    $(CXX) -c $(CXXFLAGS) -o [email protected] $< 

obj/oic.o: ./src/oic.cpp 
    $(CXX) -c $(CXXFLAGS) -o [email protected] $< 


.PHONY: all oic 

clean: 
    rm -rf obj/*.o 
    rm -rf bin/oic 

Vielen Dank.

+0

Mögliche Duplikat (https://stackoverflow.com/questions/9985839/creating-cmakelists-file-from-existing-makefile) – Gaurav

+1

'diese Datei eine Menge Fahnen [CMakeLists Datei aus vorhandenen Makefile Erstellen] hat und Befehlsoptionen, ich fühle mich jetzt sehr ahnungslos. - Wir sind kein Code Writer Service. Nehmen Sie einen Befehl in Makefile, versuchen Sie es in CMake zu konvertieren, falls Sie Schwierigkeiten haben, verwenden Sie die Suche. Wenn die Suche nicht hilft, fragen Sie hier nach bestimmten Befehlen. – Tsyvarev

+0

@Tsyvarev, OP sucht nach einem "Einstiegspunkt". Warum gibst du ihm nicht ein paar Hinweise? Er/sie müsste immer noch die vollständige Lösung selbst herausfinden. OP könnte in einer Situation sein, wenn er/sie keine Zeit hat, CMake von A bis Z zu lernen. –

Antwort

2

Hier sind ein paar Hinweise, die Sie auf dem richtigen Weg bekommen sollten:

+0

Danke, das sind wirklich hilfreiche Hinweise, auf denen ich mich stützen kann. – hirikarate

1

ich Ihren Code nicht haben, so kann ich auf die Linien, die die möglichen Äquivalente zeigen nur Sie haben:

Sie ausführbare Schaffung sind. In CMake geschieht dies mit add_executable.

add_executable(oic source-file1.cpp source-file2.cpp ...) 

Dieser Befehl stellt sicher, dass oicausführbares Ziel erstellt wird. Wenn Sie dieses Ziel erstellen, haben Sie oic binär am Ende.

Equivalent Linien für die Fahnen Einstellung:

set_target_properties(oic PROPERTIES LDFLAGS "your link flags") 
set_target_properties(oic PROPERTIES COMPILE_FLAGS "your compile flags") 

Google für Properties on Targets und set_target_properties.


CMakeLists.txt

# cmake_minimum_required(VERSION 3.5.1) # you don't need this at this point 

project(oic) 
enable_language(C CXX) 

set(oic_sources 
    src/faceDetection.cpp 
    src/pupilDetection.cpp 
    src/kalmanFilters.cpp 
    src/util.cpp 
    src/oic.cpp 
) 

add_executable(oic ${oic_sources}) 

set_target_properties(oic PROPERTIES LDFLAGS "your link flags") 
set_target_properties(oic PROPERTIES COMPILE_FLAGS "your compile flags") 

das Projekt

Lassen Sie uns beim Aufbau übernehmen:

So sollte das Skelett für Ihre CMakeLists.txt-Datei dass Sie den Ordner oic_root haben, in dem Sie oic Projekt haben, in dem es Ihre src/*.cpp Dateien gibt. Es sei angenommen, sind Sie in diesem Ordner:

$ oic> cd .. 
$ oic_root> make oic_build 
$ oic_root> cd oic_build 
$ oic_build> cmake ../oic -G "Unix Makefiles" 
+0

Es sollte dich irgendwo hinbringen, stell bitte weitere Fragen, wenn du dem irgendwie folgst. –

+0

Danke, ich habe viel von Ihren und Angews Antworten gelernt, jetzt habe ich das Gefühl, dass ich Hinweise habe, über mich selbst zu gehen. – hirikarate