2017-10-09 165 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