【问题标题】:How to convert this Makefile into CMakeList.txt?如何将此 Makefile 转换为 CMakeList.txt?
【发布时间】:2017-10-09 11:47:29
【问题描述】:

我对 Makefile 和 CMake 都不熟悉,我想将这个 3rd-party Makefile 转换为 CMakeList.txt 以便这个 3rd-party 代码可以用最新的 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

非常感谢。

【问题讨论】:

  • this file has a lot of flags and command options, I'm feel very clueless now. - 我们不是代码编写服务。在 Makefile 中取一个命令,尝试将其转换为 CMake,以防遇到困难使用搜索。如果搜索没有帮助,请在此处询问具体命令。
  • @Tsyvarev,OP 正在寻找entry point。为什么不给他/她一些提示呢?他/她仍然必须自己找出完整的解决方案。 OP 可能处于没有时间从头到尾学习 CMake 的情况。
  • 当然我不是说 SO 是一个代码编写服务,很抱歉无意中让你有这种感觉。事实上,@Angew 的回答确实是一种非常合适的回答问题的方式。至少我没有问:“如何在 C++ 中进行冒泡排序”然后woola 有人提供了一个完全运行的代码(您可以在 SO 中搜索这些情况)。我清楚地说“我一无所知”,并且提供一些线索足以让我将响应标记为答案。

标签: c++ makefile cmake


【解决方案1】:

这里有一些建议可以帮助你走上正轨:

【讨论】:

  • 谢谢你,这些真的很有帮助,我可以根据自己走路。
【解决方案2】:

我没有你的代码,所以我只能显示你所拥有的行的可能等效项:

您正在创建可执行文件。在 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 Targets 和 set_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"

【讨论】:

  • 它应该能让你到达某个地方,如果你以某种方式遵循这个,请提出更多问题。
  • 谢谢你,我从你和Angew的回答中学到了很多,现在我觉得我有线索可以走自己了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 2011-03-19
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多