g++编译
静态库编译并测试
g++ -c myAPI.cpp && ar crv libmyAPI.a myAPI.o
g++ main.cpp libmyAPI.a -o my_test
动态库编译并测试
g++ -std=c++11 -shared -fpic *.cpp -I. -L. -lIrsEncrypt -o libIrisEncryptAPI.so
g++ -std=c++11 *.cpp -I. -L. -lIrsEncrypt -lopencv_world -o crpt_test
人脸库编译
g++ -std=c++11 -shared -fpic *.cpp -I. -L./lib/linux64 -lirs_lazybox -liristar_face_recognition -o FaceAPIV22.so
安装
注意
qtcreator 支持cmake
vs2017 支持cmake
安装
./configure
make -j4&&make install
ln -s /user/local/bin/cmake /usr/bin/cmake
//g++ 安装:
yum -y install gcc-c++
使用
简单编译
#普通win编译
cmake -G "Visual Studio 14 2015 Win64" ..&&msbuild secretssl.sln /m /p:Configuration=Debug
#普通linux编译
rm -rf build-linux64&&mkdir build-linux64&&cd build-linux64&&cmake .. &&make -j4&&cd ..
交叉编译
//安卓交叉编译
rm -rf build-android&&mkdir build-android&&cd build-android&&cmake -DBUILDT="android" -DCMAKE_SYSTEM_NAME=Android -DANDROID_NDK="/home/hyc/android-ndk-r15c/" -DCMAKE_TOOLCHAIN_FILE="/home/hyc/android-ndk-r15c/build/cmake/android.toolchain.cmake" -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-26 -DANDROID_NATIVE_API_LEVEL=26 -DANDROID_STL=gnustl_shared .. &&make -j4&&cd ..
//arm64交叉编译
rm -rf build-arm64&&mkdir build-arm64&&cd build-arm64&&cmake -DBUILDT="arm64" -DCMAKE_C_COMPILER="/home/hyc/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc-4.9.4" -DCMAKE_CXX_COMPILER="/home/hyc/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++" .. &&make -j4&&cd ..
openmp
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
target_link_libraries(MyTarget PUBLIC OpenMP::OpenMP_CXX)
endif()
opencv
set(Opencv_DIR D:/opencv/build)
find_package( Opencv REQUIRED)
if(Opencv_FOUND)
message(STATUS "The Opecv lib is found!")
endif()
set(OpenCV_DIR ../build)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} ${SRC_CODE} ${INC_DIR})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
判断cpu架构
set(VERSION 2.0.1)
string(TIMESTAMP DEFAULT_BUILD "%Y%m%d")
set(BUILD ${DEFAULT_BUILD} CACHE STRING "Build string (default: ${DEFAULT_BUILD})")
message(STATUS "VERSION= ${VERSION}, BUILD = ${BUILD}")
math(EXPR BITS "${CMAKE_SIZEOF_VOID_P} * 8")
string(TOLOWER ${CMAKE_SYSTEM_PROCESSOR} CMAKE_SYSTEM_PROCESSOR_LC)
if(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86_64" OR
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "amd64" OR
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "i[0-9]86" OR
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "x86" OR
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ia32")
if(BITS EQUAL 64)
set(CPU_TYPE x86_64)
else()
set(CPU_TYPE i386)
endif()
if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ${CPU_TYPE})
set(CMAKE_SYSTEM_PROCESSOR ${CPU_TYPE})
endif()
elseif(CMAKE_SYSTEM_PROCESSOR_LC STREQUAL "aarch64" OR
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*64*")
set(CPU_TYPE arm64)
elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "arm*")
set(CPU_TYPE arm)
elseif(CMAKE_SYSTEM_PROCESSOR_LC MATCHES "ppc*" OR
CMAKE_SYSTEM_PROCESSOR_LC MATCHES "powerpc*")
set(CPU_TYPE powerpc)
else()
set(CPU_TYPE ${CMAKE_SYSTEM_PROCESSOR_LC})
endif()
message(STATUS "${BITS}-bit build (${CPU_TYPE})")
判断操作系统
cmake_policy(SET CMP0054 NEW)
IF (CMAKE_SYSTEM_NAME MATCHES "Linux")
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")
ELSEIF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
ELSE ()
MESSAGE(STATUS "other platform: ${CMAKE_SYSTEM_NAME}")
ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")
判断编译器
cmake_policy(SET CMP0054 NEW)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# using Clang
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
# using GCC
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
# using Intel C++
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
# using Visual Studio C++
endif()
CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径
使用CMAKE管理工程,可以设置工程中的INSTALL项目运行时安装的路径,使用命令:install。
可以简单的设置安装文件的路径和文件夹:
set(head_files
//要安装的头文件
)
install(TARGETS ${head_files} DESTINATION ${CMAKE_BINARY_DIR}/include)
install(TARGETS myLib DESTINATION ${CMAKE_BINARY_DIR}/Lib)
上述设置方法会将Lib文件和DLL文件安装在同一个目录中,可以使用下面命令设置在不同的文件目录:
复制代码
set(head_files
//要安装的头文件
)
install(TARGETS ${head_files} DESTINATION ${CMAKE_BINARY_DIR}/Lib)
install(TARGETS myLib
RUNTIME DESTINATION ${CMAKE_BINARY_DIR}/bin
LIBRARY DESTINATION ${CMAKE_BINARY_DIR}/lib
ARCHIVE DESTINATION ${CMAKE_BINARY_DIR}/lib/static)
复制代码
config.h.in
#ifndef INCLUDE_GUARD
#define INCLUDE_GUARD
#define PROJECT_NAME "@PROJECT_NAME@"
#define VERSION "@VERSION@"
#define BUILD "@BUILD@"
#cmakedefine USE_ANDROID
#cmakedefine USE_LOGOUT
#define BITS_IN_JSAMPLE @BITS_IN_JSAMPLE@
#cmakedefine REQUIRE_SIMD 1
#endif // INCLUDE_GUARD