CMakeLists 一回生二回熟

最近又写了一些cmakelists 文件,对cmake使用更加顺手啦。

多项目时,总的CMakelists file following:

# CMAKE verison
cmake_minimum_required(VERSION 3.0.0)

# Project name
project(xxxgame)

### Created The Build Output Directory
set(build_output_directory ${CMAKE_BINARY_DIR}/bin/ CACHE INTERNAL "Build Output directory")
message("Build Output Directory : ${CMAKE_BINARY_DIR}")
file(MAKE_DIRECTORY ${build_output_directory})
file(MAKE_DIRECTORY ${build_output_directory}/mod)
file(MAKE_DIRECTORY ${build_output_directory}/xxxfig/xxxom)
message("Created The Build Output Directory Done(${build_output_directory}).")


### Copy xxxfigruation files
FILE(GLOB xxxfig_files ../xxxfig/*.* )
FILE(GLOB xxxfig_xxxom_files ../xxxfig/xxxom/*.* )
file(COPY ${xxxfig_files} DESTINATION ${build_output_directory}/xxxfig/)
file(COPY ${xxxfig_xxxom_files} DESTINATION ${build_output_directory}/xxxfig/xxxom/)
message("Copy xxxfigruation files to xxxfig directory Done(${build_output_directory}).")


### Baisc xxxfiguration
set(base_add_include ../../../ ../../xxx555 CACHE INTERNAL "Baisc addtion include directory")
message("base_add_include :${base_add_include}")
set(base_link_directory ../../../lib ${build_output_directory} CACHE INTERNAL "Baisc Link include directory")
message("base_link_directory :${base_link_directory}")
set(base_lib pthreadVC2.lib CACHE INTERNAL "Baisc addtion library")
set(exbase_lib ${base_lib} libxxxgame.lib CACHE INTERNAL "Extension Baisc addtion library")
set(ffmpeg_lib swscale.lib swresample.lib postproc.lib avdevice.lib avfilter.lib avformat.lib avcodec.lib avutil.lib CACHE INTERNAL "FFmpeg addtion library")
message("base_lib :${base_lib}")
message("exbase_lib :${exbase_lib}")
message("ffmpeg_lib :${ffmpeg_lib}")


### Preprocessor Define
set(base_preprocessor -DMERI CACHE INTERNAL "Baisc Preprocessor Define")

set(xxxgame_macros -Dxxxgame_LIB -Dxxxgame_xxxxxE -DUSE_xxxgame_WIN32_MACRO -D__STDC_CONSTANT_MACROS -DFF_API_OLD_AVIO=0 -DPIPELINE_FILTER)

###
# #define NTDDI_WINXP                         0x05010000
# #define NTDDI_WIN7                          0x06010000
# #define NTDDI_WIN8                          0x06020000
# #define NTDDI_WIN10                         0x0A000000
# #define HAVE_STRUCT_TIMESPEC  // error: redefinition of 'struct timespec' in pthread.h or time.h, link:https://stackoverflow.com/questions/33557506/timespec-redefinition-error
# #define _WIN32_WINNT                        0x0501  //Windows XP  link:https://www.cnblogs.com/zhcncn/archive/2013/05/21/3091052.html
# #define _WIN32_WINNT                        0x0602  //Windows 8
# #define _WIN32_WINNT                        0x0601  //Windows 7
# #define _WIN32_WINNT                        0x0501  //Windows XP
###
set(windows_macros -DWIN32 -D_WINDOWS -D_WIN32_WINNT=0x0501 -DNTDDI_VERSION=0x05010000 -DHAVE_STRUCT_TIMESPEC )
if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
	set(base_preprocessor ${xxxgame_macros} ${windows_macros} -DDEBUG CACHE INTERNAL "Baisc Preprocessor Define")
else()
	set(base_preprocessor ${xxxgame_macros} ${windows_macros} -DRELEASE CACHE INTERNAL "Baisc Preprocessor Define")
endif()

### sets Character Set to Unicode or Multi Byte
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /UMBCS /D_MBCS")


add_subdirectory(xxxxxe-asxxxxem)
add_subdirectory(xxxxxe-ctrl-sdl)
#add_subdirectory(server-webrtc)
add_subdirectory(xxxxxe-sexxx-webrtc-xxx)
add_subdirectory(xxxxxe-encoxxxo)
add_subdirectory(xxxxxe-encoxxxfx)
add_subdirectory(xxxxxe-encoxxxnx)
add_subdirectory(xxxxxe-encodxxeo)
add_subdirectory(xxxxxe-encxxx64)
add_subdirectory(xxxxxe-filxxxyuv)
add_subdirectory(xxxxxe-server-xxx555)
add_subdirectory(xxxxxe-vsxxxop)
add_subdirectory(xxxxxe-vsoxxx3d)
add_subdirectory(xxxxxe-vsxxxm)
add_subdirectory(xxxxxe-vsxxxn)
add_subdirectory(libxxxgame)
add_subdirectory(xxxgame-sexxxiodic)
add_subdirectory(xxxgame-sexxxriven)
add_subdirectory(xxxgame-hook)
add_subdirectory(xxxgame-client)
add_subdirectory(ETWLog)
add_subdirectory(intxxxxxxture)

其中比较重要的点:

设置与子项目的cmakelists 共享变量时使用:
set([variable name] [value] CACHE INTERNAL ["Description text"])   //INTERNAL  还可以换成Private or Public,区别还请高人赐教。
如果遇到多字节编码和单字节编码错误时可以使用:
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /UMBCS /D_MBCS")  //Multi Byte
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_UNICODE /DUNICODE")  //Unicode Byte

好像还可以设置预定义宏来改变Multi and Unicode,我没去实验。

*添加子项目:add_subdirectory

子项目

# CMAKE verison
cmake_minimum_required(VERSION 3.15)

# Project name
set(objname sxxxxwebrtc)
project(${objname})


### Source File
set(srcpath xxxwebrtcxxt/)
FILE(GLOB source_files ${srcpath}*.cpp )
set(source ${source_files} )

## addtion include directory
set(add_include_dir ../../../xxxer-webrtc)

## addtion library directory
set(add_lib_dir ../../..xBoost/lib/x64)

## addtion library
if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
	set(add_lib owxx.lib libboost_system-vc141-mt-sgd-x64-1_67.lib libboost_random-vc141-mt-sgd-x64-1_67.lib libboost_date_time-vc141-mt-sgd-x64-1_67.lib)
else()
	set(add_lib owxxase.lib libboost_system-vc141-mt-s-x64-1_67.lib libboost_random-vc141-mt-s-x64-1_67.lib libboost_date_time-vc141-mt-s-x64-1_67.lib)
endif()
set(add_lib ${add_lib} secxxxmm.lib ${build_output_directory}/xxd/txxl.lib)

## Preprocessor Definitions
if(${CMAKE_BUILD_TYPE} STREQUAL Debug)
	set(preprocessor_macroa -D__xxDC_LIMxxxINGS)
else()
	set(preprocessor_macroa -D__xxC_xxMxxxxxxRNINGS)
endif()




### Set Statically link the runtime libraries
add_compile_options(
        $<$<CONFIG:>:/MT> #---------|
        $<$<CONFIG:Debug>:/MTd> #---|-- Statically link the runtime libraries
        $<$<CONFIG:Release>:/MT> #--|
    )

### Configruation object
include_directories(${base_add_include} ${add_include_dir})
link_directories(${base_link_directory} ${add_lib_dir})
link_libraries(${exbase_lib} ${add_lib})
add_definitions(${base_preprocessor} ${preprocessor_macroa})

### Set build output directory
SET(LIBRARY_OUTPUT_PATH ${build_output_directory}/xxod)

### generate dynamic library
add_library(${objname} SHARED ${source})

### dependencies
add_dependencies(${objname} xxxgame xxxdl)

其中比较重要的点:

Set Statically link the runtime libraries following:
add_compile_options(
        $<$<CONFIG:>:/MT> #---------|
        $<$<CONFIG:Debug>:/MTd> #---|-- Statically link the runtime libraries
        $<$<CONFIG:Release>:/MT> #--|
    )
    
    add_compile_options(
        $<$<CONFIG:>:/MD> #---------|
        $<$<CONFIG:Debug>:/MDd> #---|-- Statically link the runtime libraries
        $<$<CONFIG:Release>:/MD> #--|
    )

一个是static link multi thread , 一个是Dynamic link multi thread. 目前的水平也只能识别这个错误,不知其所以然。

Release(发布) 目录

即存放项目namake生成的 *.exe, *.dll, *.lib, *.a, *.o 以及debug文件。

SET(LIBRARY_OUTPUT_PATH [build directory])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值