CMake常用命令总结

1、首先用cmake_minimum_required (VERSION 3.14.1)指定所需cmake的最小版本。

2、project(name CXX C)指定工程名称,这个会影响PROJECT_SOURCE_DIR(第一个project所在的CMakelist.txt所在的文件的目录)的值

3、通用的属性可以放在单独的文件中如ToolChain.cmake,然后可以用include (ToolChain.cmake)等方式饱含。

4、set(CMAKE_VERBOSE_MAKEFILE ON/OFF)用于开关编译时的详细信息打印

5、常用变量:

     指定编译选项

     CMAKE_C_FLAGS : 指定gcc编译选项,如-02 ,-g,当然也可用通过add_definitions设置。

     CMAKE_CXX_FLAGS:指定g++编译选项。

     CMAKE_C_FLAGS_DEBUG:指定debug版本编译选项

     指定链接选项

     CMAKE_EXE_LINKER_FLAGS

     CMAKE_MODILE_LINKER_FLAGS

     CMAKE_SHARED_LINKER_FLAGS

      CMAKE_STATIC_LINKER_FLAGS

     指定编译器

     CMAKE_C_COMPILER:指定C编译器,如gcc

     CMAKE_CXX_COMPILER:指定C++编译器,如g++

     BUILD_SHARED_LIBS:指定默认生成库文件类型,on:动态库,off 静态

     CMAKE_BUILD_TYPE:设置编译类型,如Debug、Release

     指定RPATH相关选项,如果为true,则关闭rpath功能

     CMAKE_SKIP_RPATH;构建和安装期间

     CMAKE_SKIP_BUILD_RPATH:构建期间

     CMKAE_INSTALL_RPATH:安装期间

     

6、指定编译输出路径

set(LIBRARY_OUTPUT_PATH, $(PROJECT_SOURCE_DIR}/output) 指定库文件输出路径

set(EXEC_OUTPUT_PATH, $(PROJECT_SOURCE_DIR}/output) 指定可执行文件输出路径

CMAKE_CURRENT_BINARY_DIR 用于指定当前的二进制文件生成路径

CMAKE_CUREENT_SOURCE_DIR指定当前CMAKEFILE文件所在目录

添加依赖:

include_directories:添加头文件搜索路径,相当于-I

link_directories添加库文件搜索路径,相当于-L

aux_source_directory(dir,var) 包含目录下的所有源文件,相当于以下代码:

var=“”

set(list "*.c" “*.cpp”)

foreach(item IN LIST list)

        file(GLOB_RECUSE itemfile "dir/{item}")

       list(APPEND var itemfile)

endforeach()

add_subdirectory(src):添加子目录

add_executable(name, $(sourcefile)):指定编译文件,编译可执行程序

add_libarary(name,SHARED,$(sourcefile)):指定编译文件,编译库文件

target_link_libraried(name,$(dependlibs))添加依赖的库文件,相当于-l

link_libraries("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so")添加依赖库文件,相当于-I, 需要全路径,并且只能用于add_executable之前。

6.soname 设置

方法一 

set_target_properties(target  PROPERTIES  VERSION xx SOVERSION XXX )

方法二

set(CMAKE_CXX_FLAGS  " -Wl,-soname,xxx")

set_target_properties(target  PROPERTIES NO_SONAME 1)

7、install

可以用install命令指定编译文件的安装以及普通文件的操作、shell命令的执行

install(TARGETS xx libxx.so libxx.a

        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}

        LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

        INSTALL_DIR DESTINATION  ${CMAKE_INSTALL_LIBDIR})

安装路径可以通过CMAKE_INSTALL_PREFIX设置

目录拷贝

install(DIRECTORY xx/cofnig  DESTINATION ${CMAKE_INSTALL_PREFIX}/)

文件拷贝

install(FILES xx DESTINATION ${CMAKE_INSTALL_PREFIX}/)

files(GLOB dep_libs "xx/xx/*.so*)

install(FILES dep_libs

            DESTINATION ${CMAKE_INSTALL_PREFIX}/)

编译过程中执行命令(非cmake时执行)

install(CODE "messge(\”xxxx\"))

install(CODE "execute_process(COMMAND bash -c \"cp xx/*.so ${dst} -rf\") ")

详细字段参考:

【CMake】cmake的install指令_Yngz_Miao的博客-CSDN博客_cmake install

8、重定义__FILE__,简化日志打印

add_defineitions(-Wno-builtin-macro-redefined)

function(redefine_file_micro targetname)

        get_target_property(source_files, "${targetname}" SOURCES)

        foreach(sourcefile ${source_files})

                get_property(defs SOURCE "${sourcefile}" PROPERTUY COMPILE_DEFINITIONS)

                get_filename_component(filepath "${sourcefile}" ABSOLUTE)

                string(REPLACE ${PROJECT_SOURCE_DIR}/ "" relpath ${filepath}) 

                list(APPEND defs "__FILE__=\"${relpath}\"”

                set_property(SOURCE "${sourcefile}" PROPERTY  COMPILE_DEFINITIONS ${defs})

        endforeach()

endfunction

链接的时候调用redefine_file_micro(xxx)

9、交叉编译设置

参考:CMake: (三) 交叉编译 - 采男孩的小蘑菇 - 博客园

10、其他

message(status,"message ${xx}); 打印信息

file(MAKE_DIRECTORY xxx)创建文件

你可能感兴趣的:(cmake)