CMakeLists.txt学习记录及学习资料

    xiaoxiao2021-12-14  27

    PROJECT (项目名称) //必写,生成项目名 SET (SRC_LIST 1.c 2.c 3.c) //视情况而定,当一个项目有不止一个.C/.CPP文件时,可以将它们整体命名为SRC_LIST变量 //注意,当某个C/CPP文件的文件名有空格,比如fu nc.c此时必须使用双引号,即写为SET(SRC_LIST“fu nc.c") //.C/.CPP文件之间可以用空格隔开,也可以用分号隔开 ADD_EXECUTABLE (随意命名 .c/.cpp文件名称)//必写 ,给该C/CPP文件生成一个可执行文件,这个可执行文件的名字就是自己随意命名的 ADD_EXECUTABLE (随意命名 ${SRC_LIST}) //必写,但是视情况而定选择上面一种写法或者这种写法,如果需要SET语句,最好使用这种写法,含义与上面那种写法一样 ADD_SUBDIRECTORY (在当前工程存放源文件的子目录的名称 指定的在build文件下的子目录名称) //在当前工程存放源文件的子目录的名称,这里的源文件就是指C/CPP文件 //指定的在build文件下的子目录名称是用于存放构建可执行文件时生成的中间二进制和目标二进制的 //比如: ../t1是整个t1项目的路径 ../t1/src 路径下存放main.c 运行ADD_SUBDIRECTORY (src bin)语句 构建之后就可以发现main.c生成的可执行二进制文件以及中间二进制文件就生成在../t1/build/bin路径 SUBDIRS (在当前工程存放源文件的子目录的名称) //功能与上面的那个语句基本相同 //比如: ../t1是整个t1项目的路径 ../t1/src 路径下存放main.c 运行SUBDIRS (src)语句 构建之后就可以发现main.c生成的可执行二进制文件以及中间二进制文件就生成在../t1/build/src路径 INSTALL (FILES 要安装的普通文件的文件名 DESTINATION 想要安装的路径 ) INSTALL (PROGRAMS 要安装的非目标文件的可执行程序比如脚本一类的东西的名称  DESTINATION 想要安装的路径 ) INSTALL (DIRECTORY 要安装的目录名称  DESTINATION 想要安装的路径 ) //比如: 要求:将runhello.sh与hello二进制安装到/<prefix>/bin 将doc目录里的hello.txt及COPYRIGHT,README安装到/<prefix>/share/doc/cmake/t2 所以: 安装COPYRIGHT和README INSTALL (FILES COPYRIGHT README DESTINATION share/doc/cmake/t2) 安装runhello.sh脚本 INSTALL (PROGRAMS runhello.sh DESTINATION bin) 安装hello.txt-------由于hello.txt在doc目录下,所以不能直接安装真个目录doc,要想只安装doc里的内容,使用 doc/ INSTALL (DIRECTORY doc/ DESTINATION share/doc/cmake/t2) INSTALL (TARGETS 需要安装的东西们的名字 ARCHIVE|LIBRARY|RUNTIME DESTINATION 想要安装的路径 ) //功能: 安装的是可执行二进制,静态库,动态库,一般是ADD_EXECUTABLE或者ADD_LIBRARY定义的目标文件 //当需要安装的东西不止一样时,相互之间用空格隔开 //ARCHIVE 静态库关键字 LIBRARY 动态库 RUNTIME 可执行二进制 //比如: 要求:将hello的共享库安装到<prefix>/lib目录,库包括动态库libhello.so.XX和静态库libhello.a以及libhello_static.a,将hello.h安装到<prefix>/include/lib目录 步骤: INSTALL (TARGETS hello hello_static         LIBRARY DESTINATION lib         ARCHIVE DESTINATION lib) INSTALL (FILES hello.h DESTINATION include/hello) ADD_LIBRARY (库的名称  SHARED|STATIC|MODULE C/CPP源文件名字或者是在SET里设置的变量的名字 ) //SHARED 动态库        STATIC 静态库    MODULE使用dyld时有效,否则被视为动态库 //比如: SET (LIBHELLO_SRC hello.c) ADD_LIBRARY (hello SHARED ${LIBHELLO_SRC}) 即可生成libhello.so //库的名称不用写全为libhello.so,只需填写hello,cmake系统会自动生成全名 SET_TARGET_PROPERTIES (库的名字 PROPERTIES OUTPUT_NAME "库的新名字 ") //功能:由于库的名字相同时会造成其中一个无法正常构建,若想 同时构建两个名字相同的静态库和动态库,需要使用该语句 //比如: 要求:同时构造名字为libhello.XX的静态库和动态库 所以: SET (LIBHELLO_SRC hello.c) ADD_LIBRARY (hello SHARED ${LIBHELLO_SRC}) ADD_LIBRARY (hello_static STATIC ${LIBHELLO_SRC}) SET_TARGET_PROPERTIES (hello_static PROPERTIES OUTPUT_NAME "hello") 即可同时获得libhello.so和libhello.a两个库 SET_TARGET_PROPERTIES (动态库名字 PROPERTIES VERSION 数字 SOVETSION 数字 ) //语句里的两个数字不需要相同,可以带小数点 //功能:实现动态库版本号 VETSION 指代动态库版本 SOVERSION 指代API版本 //比如: 要求:生成一个库版本号为1.2,API版本号为1的动态库且库的名字叫hello(也不需要写全名) SET_TARGET_PROPERTIES (hello PROPERTIES VERSION 1.2 SOVERSION 1) INCLUDE_DIRECTORIES (头文件路径) //功能:添加头文件路径 //比如: 头文件在/usr/incude/hello里,添加路径 INCLUDE_DIRECTORIES (/usr/include/hello) LINK_DIRECTORIES (非标准的共享库搜索路径) //非标准的共享库指的是自定义的库,由于路径不是默认的所以要用到该语句 TARGET_LINK_LIBRARIES (可执行文件的名字 所要链接的共享库的名字) // 功能:将可执行文件链接到所需要的库 //比如: 要求:有一个可执行文件名字为main 且它所需要链接的库是在默认路径的名字为hello TARGET_LINK_LIBRARIES (main hello) https://cmake.org/cmake/help/v3.5/manual/cmake-commands.7.html //所有cmake命令 https://cmake.org/ //cmake官网 http://download.csdn.net/detail/u014228701/9703324 //cmake学习资料
    转载请注明原文地址: https://ju.6miu.com/read-968019.html

    最新回复(0)