如何将这个Makefile转换成CMakeList.txt?

时间:2017-10-09 11:47:30

标签: c++ makefile cmake

我不熟悉Makefile和CMake,我想将这个第三方Makefile转换为CMakeList.txt,以便这个第三方代码可以用最新的DLib代码编译,但我不知道如何。

我只知道一些基本的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 $@ $^ $(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 $@ $<

obj/faceDetection.o: ./src/faceDetection.cpp
    $(CXX) -c $(CXXFLAGS) -o $@ $<

obj/pupilDetection.o: ./src/pupilDetection.cpp
    $(CXX) -c $(CXXFLAGS) -o $@ $<

obj/kalmanFilters.o: ./src/kalmanFilters.cpp
    $(CXX) -c $(CXXFLAGS) -o $@ $<

obj/util.o: ./src/util.cpp
    $(CXX) -c $(CXXFLAGS) -o $@ $<

obj/oic.o: ./src/oic.cpp
    $(CXX) -c $(CXXFLAGS) -o $@ $<


.PHONY: all oic

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

非常感谢。

2 个答案:

答案 0 :(得分:2)

以下是一些可以帮助您走上正确轨道的指针:

答案 1 :(得分: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")

Google 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"