多系统区分
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)
设置编译选项, 常见编译选项列表:
- -w: 关闭编译时的警告,也就是编译后不显示任何warning,因为有时在编译之后编译器会显示一些例如数据转换之类的警告,这些警告是我们平时可以忽略的。
- -Wall: 编译后显示所有警告。
- -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 ...
网友评论