CMake资料

cmake教程:https://wenku.baidu.com/view/73ab3fcad5bbfd0a79567372.html

 cmake常用设置和函数:https://blog.csdn.net/LaineGates/article/details/79190398

 https://www.cnblogs.com/Braveliu/p/15591020.html

https://www.cnblogs.com/Braveliu/category/1614009.html

https://blog.csdn.net/Sakaue/article/details/38377661

https://www.jianshu.com/u/08ef8e6eb2f6

 

## CMake简易教程
##目录结构
inc 
    adp.h
    drv.h
    win.h
adp
    adp.cpp
    test.cpp
drv
    drv.cpp
    func.cpp
show
    win.cpp
    hello.c
    
src
    main.cpp
    
    


#设置工程的cmake版本号
cmake_minimum_required(VERSION 3.14.1)
#设置工程名称
project(itbugs)

#比较判断
set(PATH_TEST_NAME "hello_itbugs")
if ("${PATH_TEST_NAME}" STREQUAL "hello_itbugs" OR "${PATH_TEST_NAME}" STREQUAL "itbugs")
    #定义
    set(DIR_SRC_PATH
        ${CMAKE_SOURCE_DIR}/adp
        ${CMAKE_SOURCE_DIR}/drv
        ${CMAKE_SOURCE_DIR}/show
    )
else()
    set(DIR_SRC_PATH
        ${CMAKE_SOURCE_DIR}/adp
        ${CMAKE_SOURCE_DIR}/drv
        ${CMAKE_SOURCE_DIR}/show
        ${CMAKE_SOURCE_DIR}/src
    )
endif()

# 函数
# 搜索目录下的所有源文件
function(glob_all_source_files DIR_LIST)
  foreach(dir ${DIR_LIST})
    file(GLOB_RECURSE SRC_C_LIST "${dir}/*.c")
    file(GLOB_RECURSE SRC_CXX_LIST "${dir}/*.cpp")
    list(APPEND FILE_LIST ${SRC_C_LIST} ${SRC_CXX_LIST})
  endforeach()
  set(OBJ_SRC_LIST ${FILE_LIST} PARENT_SCOPE)
endfunction()

#第二种函数形式
macro(SetProjInfo)
    set(LIBS_LINK_OPTIONS -fPIC -Wl,-z,relro,-z,now -Wl,-z,noexecstack -pie)
    set(LIBS_COMPILE_OPTIONS
        -O2
        -Wall
        -Werror
    )
endmacro()

#调用函数
SetProjInfo();
glob_all_source_files("${DIR_SRC_PATH}")

#包含头文件
include_directories(
    ${DIR_SRC_PATH})
    
##调用系统函数排序
list(SORT OBJ_SRC_LIST COMPARE FILE_BASENAME)

#添加到动态库
add_library(it_bugs SHARED ${OBJ_SRC_LIST})
#编译选项
target_compile_options(it_bugs PRIVATE ${LIBS_COMPILE_OPTIONS})
#链接选项
target_link_options(it_bugs PRIVATE ${LIBS_LINK_OPTIONS})

set(LIBS_IMG_NAME "IT_BUGS.IMG")

# 调用commond命令
add_custom_command(
    TARGET it_bugs POST_BUILD
    ##可以调用COMMOND命令,例如改变权限
    COMMAND chmod 444 $<TARGET_FILE:it_bugs>
    COMMAND rm -f ${LIBS_IMG_NAME} && ${LZMA_TOOL} $<TARGET_FILE:it_bugs> ${LIBS_IMG_NAME} -xattrs -root-mode 755 -noappend
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
#发布到指定目录
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${LIBS_IMG_NAME} DESTINATION ${CMAKE_SOURCE_DIR}/${LIBS_IMG_NAME} OPTIONAL)
install(TARGETS it_bugs
    ARCHIVE DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/lib/aaa OPTIONAL
    LIBRARY DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/lib/bbb OPTIONAL
    RUNTIME DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/bin/ccc OPTIONAL
)

 

posted on 2022-04-27 09:43  蜀山菜鸟  阅读(50)  评论(0)    收藏  举报