折腾了半下午,终于知道这个货是怎么个关系了。在此写下记录,希望遇到同样问题的同学,不要再次浪费时间了。
首先我是在Linux环境下
先列出我的CmakeLists.txt
注意,在CmakeLists.txt 里,注释用的是#
project(Camera_sugan) #工程名字
cmake_minimum_required(VERSION 2.6) #编译最低cmake版本
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11" ) #设置c++编译器
find_package(OpenCV REQUIRED) #在整个电脑上找opencv包
include_directories( #包含头文件路径
./include/inudev/
./src/
)
set(SRC_LISTS #将所有的源文件列为一个集合,集合名字叫做SRC_LISTS
./src/inuitive.cpp
./src/runCamera_Qfeeltech.cpp
)
add_library(libsugan ${SRC_LISTS}) #将集合里的所有的源文件生成一个静态库,该静态库的名字libsugan,注意,在整个CmakeLists里都要用libsugan这个
#名字来代替之前那个集合生成的库。
target_link_libraries(libsugan #链接静态库需要的依赖库
${OpenCV_LIBS}
${PROJECT_SOURCE_DIR}/lib/libCommonUtilities.so
${PROJECT_SOURCE_DIR}/lib/libInuStreams.so
)
#到此为止就在程序中生成了一个名字为libsugan的静态库,但是我们知道Linux下对库的存储格式是lib+name.a,所以我们生成的静态库名字为libsugan,那么
#存储出来的结果就是liblibsugan.a,看着很别扭,为了大众点,我们用下面这句,保证了存储出来的静态库叫做libsugan.a,
#但是请千万注意,在整个CmakeLists.txt里
#如果想链接生成的这个库必须使用 “add_library(libsugan ${SRC_LISTS})”指明的名字。
set_target_properties(libsugan PROPERTIES OUTPUT_NAME "sugan")
add_executable(demo ./src/main.cpp)
target_link_libraries(demo libsugan)