2017-10-09 157 views
0

我對Makefile和CMake都不熟悉,我想將此第三方Makefile轉換爲CMakeList.txt,以便此第三方代碼可以用最新的DLib代碼編譯,但我不知道如何。如何將此Makefile轉換爲CMakeList.txt?

我只知道一些基本的CMake命令,但是這個文件有很多標誌和命令選項,我現在感覺很無知。

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 

非常感謝。

+0

[從現有makefile創建CMakeLists文件]中可能的複製(https://stackoverflow.com/questions/9985839/creating-cmakelists-file-from-existing-makefile) – Gaurav

+1

'這個文件有很多標誌和命令選項,我現在感覺非常無知。「 - 我們不是代碼編寫器服務。在Makefile中使用一個命令,嘗試將其轉換爲CMake,以防difficultes使用搜索。如果搜索沒有幫助,請在這裏詢問具體的命令。 – Tsyvarev

+0

@Tsyvarev,OP正在尋找一個'入口點'。爲什麼不給他/她幾個提示?他/她仍然必須自己找出完整的解決方案。 OP可能處於他/她沒有時間從A到Z學習CMake的情況。 –

回答

2

這裏有幾個指標,這應該讓你在正確的軌道上:

+0

謝謝你,這些真的很有幫助,我可以依靠自己走路。 – hirikarate

1

我沒有你的代碼,所以我只能說明可能等同你有行:

你正在創建可執行文件。在CMake中,這是通過add_executable完成的。

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

此命令可以確保oic可執行目標被創建。 當你建立這個目標時,你將在末尾有oic二進制。

等值線設置標誌:

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

谷歌爲Properties on Targetsset_target_properties

因此,對於你CMakeLists.txt文件中的框架應該是:


的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") 

生成項目

假設您有文件夾oic_root其中您有oic項目,其中有src/*.cpp文件。假設你是一個文件夾中:

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

它應該把你帶到某個地方,如果你按照這個方式進行操作,請詢問更多問題。 –

+0

謝謝你,我從你和Angew的回答中學到了很多東西,現在我覺得我有自己走路的線索。 – hirikarate