树莓派Opencv张正友棋盘标定法

make、Makefile

cc = gcc  #最简易的makefile文件,这个可以用来进行文件之间的简易构建和链接,生成我们所需要的执行文件;
prom = calc 
deps = $(shell find ./ -name "*.h")
src = $(shell find ./ -name "*.c")
obj = $(src:%.c=%.o) #将所有的.c文件替换成.o文件。

$(prom): $(obj)
    $(cc) -o $(prom) $(obj)

%.o: %.c $(deps)
    $(cc) -c $< -o $@

clean:
    rm -rf $(obj) $(prom)

 

objects = main.o kbd.o command.o display.o/
insert.o search.o files.o utils.o

edit: $(objects)
    cc -o edit $(objects)

main.o : defs.h
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h

.PHONY : clean
clean:
rm edit $(objects)

#首先这个objects相当于一个宏定义来的,然后.o文件的后面可以省去.c文件,因为在makefile执行时,它是自动寻找依赖项,所以它会自动添加.c文件到.o的后面。

#简单版的makefile

objects = main.o kbd.o command.o display.o/
insert.o search.o files.o utils.o

edit: $(objects)
    cc -o edit $(objects)

$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h

.PHONY : clean
clean:
rm edit $(objects)


#整个执行操作是:首先我们是根据文件的存活时间来判定的,首先.edit文件是最总的运行文件,它是最新的,.o文件时其次的执行文件,.c文件时依赖项。我们就是要通过这个makefile进行操作他们之间的关系,.c生成.o这个叫做编译(complie),再把大量的.o合成运行文件这个叫做链接(link)。

#工作方式:GNU的make工作时的运行步骤入下:(想来其他的make也是相似)
#1、读入全部的Makefile。
#2、读入被include的其他Makefile。
#3、初始化文件里的变量。
#4、推导隐晦规则,并分析全部规则。
#5、为全部的目标文件创建依赖关系链。
#6、依据依赖关系,决定哪些目标要又一次生成。
#7、运行生成命令。

#规则的语法:
#targets : prerequisites
#    command
#......
#或者是这样:
#targets : prerequisites
#    command
#......

CMake、CMakefile

#PROJECT_SOURCE_DIR目录下的Cmakefile文件
#树目录如下图,首先bin是执行文件生成的地方,build是Makefile生成的地方,编写完CMakefile文件之后,就会去build目录下cmake .. make,就会生成文件,doc文件时用来存放文档的,image就是照片的地方,include是头文件,譬如自己编写的头文件main.h之类的,lib就是我们生成链接库的地方,src就是我们的源文件的地方。


#PROJECT_SOURCE_DIR根目录会有一个CMakeLists.txt文件,SRC目录下面也会有一个CMakeLists.txt文件,需要我们自己分别编写;

#这个是再项目根目录下的CMakeLists.txt
#cmake verson
CMAKE_MINIMUM_REQUIRED(VERSION 3.7.2)
#project name
PROJECT(main)
#head file path 头文件目录

#source directory 源文件目录
AUX_SOURCE_DIRECTORY(src DIR_SRCS)

#使用了默认的g++指定编译器
SET(CMAKE_CXX_COMPILER "g++")
#指定编译选项
SET(CMAKE_BUILD_TYPE Debug)
#指定了编译目录
SET(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/build)

#指定了最总生成执行文件的目录
SET(EXEUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#制定了生成链接库的目录
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#指定了包含的头文件的目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
#动态链接库或静态链接库的搜索路径,相当于指定gcc的L参数
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)
#添加子目录,这样就可以进入源码文件src目录可以继续构建
ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/src)

###但是遇到了一个问题就是不知道为什么生成的main是再/build/src/里面.


#根目录下的SRC里面的CMakeLists.txt

ADD_EXECUTABLE(main main.cpp)

#增加OPENCV的依赖
FIND_PACKAGE(OpenCV 3.3.1 REQUIRED)
#指定OPENCV的头文件包含
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})


#动态链接到OPENCV的依赖库里面
TARGET_LINK_LIBRARIES(main
        ${OpenCV_LIBS}
        )
#指定生成的链接的地方
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#指定执行文件生成到bin中
#SET(EXECUTABLA_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

#生成静态库
ADD_LIBRARY(static_demo STATIC main.cpp)

SET_TARGET_PROPERTIES(static_demo PROPERTIES OUTPUT_NAME "static")

#生成动态库
ADD_LIBRARY(shared_demo SHARED main.cpp)

SET_TARGET_PROPERTIES(shared_demo PROPERTIES OUTPUT_NAME "shared")

树莓派Opencv张正友棋盘标定法_第1张图片
树莓派Opencv张正友棋盘标定法_第2张图片
 
 

 

你可能感兴趣的:(树莓派Opencv张正友棋盘标定法)