tools-cmake-总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值