如何将此Makefile转换为CMakeList.txt?
我对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
非常感谢。
这里有几个指标,这应该让你在正确的轨道上:
-
-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()
。
谢谢你,这些真的很有帮助,我可以依靠自己走路。 – hirikarate
我没有你的代码,所以我只能说明可能等同你有行:
你正在创建可执行文件。在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 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的回答中学到了很多东西,现在我觉得我有自己走路的线索。 – hirikarate
[从现有makefile创建CMakeLists文件]中可能的复制(https://*.com/questions/9985839/creating-cmakelists-file-from-existing-makefile) – Gaurav
'这个文件有很多标志和命令选项,我现在感觉非常无知。“ - 我们不是代码编写器服务。在Makefile中使用一个命令,尝试将其转换为CMake,以防difficultes使用搜索。如果搜索没有帮助,请在这里询问具体的命令。 – Tsyvarev
@Tsyvarev,OP正在寻找一个'入口点'。为什么不给他/她几个提示?他/她仍然必须自己找出完整的解决方案。 OP可能处于他/她没有时间从A到Z学习CMake的情况。 –