我不熟悉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
非常感谢。
答案 0 :(得分:2)
以下是一些可以帮助您走上正确轨道的指针:
-g
通常由CMake自己正确设置,无需触及。-O3
可以替换为target_compile_options()
或将其添加到相应的CMAKE_CXX_FLAGS_*
。-D
标记可以替换target_compile_definitions()
或使用add_definitions()
进行替换。-I
可以替换为target_include_directories()
或include_directories()
。-l
被target_link_libraries()
替换为候选人。pkg-config
的调用可能需要替换为合适的find_package()
。bin/oic
的规则必须由add_executable()
替换。答案 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 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"