美文网首页
CMake教程——零碎笔记

CMake教程——零碎笔记

作者: 生活简单些 | 来源:发表于2022-03-11 10:26 被阅读0次

多系统区分

if(WIN32)
    # todo: windows action
elseif(APPLE)
    # todo: mac action
elseif(UNIX)
    # todo: linux action
endif()

windows下x64和x86区分

if(WINDOWS)
    if(CMAKE_CL_64)
        target_link_libraries (BarcodeReader "DBRx64")
    else()
        target_link_libraries (BarcodeReader "DBRx86")
    endif()
else()
    target_link_libraries (BarcodeReader "DynamsoftBarcodeReader")
endif()

将pthread作为默认线程库

# add pthread library
find_package (Threads)
target_link_libraries(smt-logger ${CMAKE_THREAD_LIBS_INIT})

由于pthread不是linux的默认线程库,需要手动制定。

设置构建类型

#set(CMAKE_BUILD_TYPE "Release")
#set(CMAKE_BUILD_TYPE "Debug")
#set(CMAKE_BUILD_TYPE "MinSizeRel")
#set(CMAKE_BUILD_TYPE "RelWithDebInfo")

编译选项

 add_definitions(-Wall)

可以通过add_definitions(xxx)设置编译选项, 常见编译选项列表:

  1. -w: 关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。
  2. -Wall: 编译后显示所有警告。
  3. -W: 类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。

TARGET的库属性设置

仅仅有静态
IMPORT_LOCATION=lib路径

有动态库且静态库作为链接:
IMPORTED_IMPLIB=lib路径
IMPORTED_LOCATION=dll路径

// 区分操作系统cpu架构, include 得在project下面
project(smt-logger-test VERSION 0.1.0)
include(CMakeDetermineSystem)

用于寻找依赖库

include(CMakeFindDependencyMacro)
find_dependency(Threads)

给Window的Debug版本加后缀

if(MSVC)
set(CMAKE_DEBUG_POSTFIX "d")
endif()

判断系统版本

project(app)
include(CMakeDetermineSystem)

生成带版本的so文件

SET_TARGET_PROPERTIES(taos PROPERTIES VERSION 1.6.0.0 SOVERSION 1)
此时会生成如下文件:

libtaos.so -> libtaos.so.1*
libtaos.so.1 -> libtaos.so.1.6.0.0*
libtaos.so.1.6.0.0

Copy Qt DLL

COMMAND ${CMAKE_COMMAND} -E copy_if_different
    $<TARGET_FILE:Qt5::Core>
    $<TARGET_FILE:Qt5::Widgets>
    ... etc ...

相关文章

网友评论

      本文标题:CMake教程——零碎笔记

      本文链接:https://www.haomeiwen.com/subject/zpcsfrtx.html