cmake_minimum_required(VERSION 3.15) project(test) set(CMAKE_CXX_STANDARD 11) set(SRC add.cpp test.cpp div.cpp) set(EXECUTABLE_OUTPUT_PATH /home/dabing/aa/bb/cc) add_executable(app ${SRC}) #搜索PROJECT_BINARY_DIR参数里的文件cpp .c ,将文件存入SRC变量中,PROJECT_BINARY_DIR是CMakeLists.txt的路径 aux_source_directory(${PROJECT_BINARY_DIR} SRC) ##CMAKE_CURRENT_BINARY_DIR是CMakeLists.txt的路径,找CMAKE_CURRENT_BINARY_DIR路径下的cpp文件 file(GLOB SRC ${CMAKE_CURRENT_BINARY_DIR}/*.cpp) #实例,文件结构{CMakeLists.txt, build, include, src},利用CMakeLists.txt编译src文件夹下的cpp等文件 # cmake_minimum_required(VERSION 3.15) project(test) #aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC) file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) #指定头文件的路径 include_directories(${PROJECT_SOURCE_DIR}/include) add_executable(app ${SRC}) #通过CMake制作动态库、静态库 add_library(库名称 STATIC/SHARED [源文件1][源文件2]) #====制作动态库==动态库有可执行权限=== cmake_minimum_required(VERSION 3.15) add_library(calc SHARED ${SRC}) #====制作静态库==== add_library(calc STATIC ${SRC}) #指定动态、静态库的输出路径 LIBRARY_OUTPUT_PATH cmake_minimum_required(VERSION 3.15) set(LIBRARY_OUTPUT_PATH /home/dd/xx/rr) add_library(calc SHARED ${SRC}) #使用制作的动态、静态库 #首先发布库,需要发布两个库:库文件和函数声明文件 #CMake的链接静态库的命令 #静态库名称可以是掐头、去尾的名字 link_libraries(<静态库名称> [<静态库名称> ...]) #指定静态或动态库的路径 link_directories(<lib_path> [<lib_path>]) cmake_minimum_required(VERSION 3.15) project(test_link_libraries) file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) include_directories(${PROJECT_SOURCE_DIR}/include) link_libraries(calc) link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib) add_executable(app ${SRC}) #========================================================= #CMake链接动态库 target_link_libraries( <target> <PRIVATE/PUBLIC/INTERFACE> <item> ) #target:指定要加载动态库的文件的名字 # 可以是源文件 # 可以是动态库文件 # 可以是可执行文件 #权限是链接库的权限,public是默认权限,动态链接库有传递性,private只能传递一次, #PUBLIC:在pulbic后边的库会被link到前边的target中,并且里边定义的函数等也会被导出,提供给第三方使用 #PRIVATE:在private后边的库仅被link到前边的target中,并且终结掉,第三方不能感知你调了啥库 #INTERFACE:在interface后面引入的库不会被链接到前边的target中,只会导出定义的函数 cmake_minimum_required(VERSION 3.15) project(test_link_libraries) file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) include_directories(${PROJECT_SOURCE_DIR}/include) link_libraries(calc) link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib) #动态库的directory link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib2) add_executable(app ${SRC}) #动态库链接要写在最后,因为动态库是在可执行程序调用才会加载动态库 target_link_libraries(app calc) #======================================================================== #message 日志 message([STATUS][WARNING][AUTHOR_WARING][SEND_ERROR][FATAL_ERROR] "message to display" ...) #(无):重要消息 #STATUS:非重要消息 #AUTHOR_WARING:CMake 警告 #SEND_ERROR:CMake 错误,继续执行,但会跳过生成的步骤 #FATAL_ERROR:CMake错误,终止所有处理过程 cmake_minimum_required(VERSION 3.15) project(test_link_libraries) file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) include_directories(${PROJECT_SOURCE_DIR}/include) message("XXXXXXXXXXXXXXXXXXXXXXX") link_libraries(calc) link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib) message(STATUS "XXXXXXXXXXXXXXXXXXXXXXX") #动态库的directory link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib2) message(FATAL_ERROR "XXXXXXXXXXXXXXXXXXXXXXX") #会终止make执行 add_executable(app ${SRC}) #动态库链接要写在最后,因为动态库是在可执行程序调用才会加载动态库 target_link_libraries(app calc) #===================================================================== #字符串拼接,使用${}将变量中的字符串取出 set(变量名 ${变量名1} ${变量名2} ...) set(tmp hello world) set(tmp1 ${tmp} ${SRC}) message(${tmp}) message(${tmp1}) #================================================ #字符串追加,list是变量 list(APPEND <list> [<element> ...]) list(APPEND tmp "xxx1" "sss2" ${SRC}) message(${tmp}) #=================================================== #字符串移除,删除某一个子字符串,拼接后的字符串以;分割,删除的字符串要全部匹配 list(REMOVE_ITEM <list> [<value> ...]) #删除子字符串main.cpp list(REMOVE_ITEM SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp) #======================================================== #获取列表的长度, list(LENGTH <list> <output variable>) #LENGTH:指定命令类型,获取列表长度 #<list>:当前操作的列表 #<output variable>:新创建的变量,用于存储列表的长度。 #========================================================== #读取列表中指定索引的元素,可以指定多个索引 list(GET <list> <element index> [<element index> ...]) #<list>:当前操作的列表 #<element index>:列表元素的索引,从0开始编号; #索引可以为负数,-1表示列表最后一个元素,-2为倒数第二个;索引超出列表长度会报错 #<output variable> 新创建的变量,存储指定索引元素的返回结果 #========================================================== #将列表中的元素用连接符连接成一个新字符串 list(JION <list> <glue> <output variable>) # list: 当前操作的列表 # glue: 指定的连接符 # output variable:新创建的变量,存储返回的字符串 #============================================ #查找列表是否存在指定元素,若没有找到则返回-1 list(FIND <list> <value> <output variable>) # list: 当前操作列表 # value: 需要在列表搜索的元素 # output variable:新创建的变量 #======================================== #在列表中指定的位置插入若干元素 list(INSRT list <element_index> <element> [<elelment> ...]) #========================================= #将指定索引的元素从列表中移除 list(REMOVE_AT <list> <index> [<index> ...]) #================================================= #移除列表中的重复元素 list(REMOVE_DUPLICATES <list>) #=========================================== #列表翻转 list(REVERSE <list>) #=========================================== #列表排序 list(SORT <list> [COMPARE <compare>] [CASE <case>] [ORDER <order>]) #COMPARE:指定排序方法。STRING:按照子母顺序排序;FILE_BASENAME:使用basename排序;MATURAL:s使用自然数排序 #CASE:指明是否大小写敏感。SENSITIVE:按照大小写敏感方式排序,默认值;INSENSITIVE:按照大小写不敏感方式排序 #ORDER:指明排序的顺序。ASCENDING:按照升序排序,默认;DESCENDING:按照降序方式排序 #================================================================ #自定义宏 add_definitions(-D<宏>) #================================================================ #CMakeLists文件嵌套 add_subdirectory(source_dir) #source_dir 是指子CMakeLists所在位置的目录
标签:SRC,CMakeLists,CMAKE,list,SOURCE,link,相关,txt,DIR From: https://www.cnblogs.com/gishuanhuan/p/17558650.html