cmake、cmake install
cmake
https://www.jianshu.com/p/7326f9167fae
https://blog.youkuaiyun.com/weixin_34319640/article/details/87972767
设置cmake的C/C++编译标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD 11)
CMAKE_SOURCE_DIR、PROJECT_SOURCE_DIR等含义
https://www.cnblogs.com/3d-gis/articles/14398733.html
CMAKE_SOURCE_DIR确实是指定义了顶级CMakeLists.txt的文件夹;
PROJECT_SOURCE_DIR是指包含最近的project()命令的CMakeLists.txt的文件夹;
CMAKE_CURRENT_SOURCE_DIR 这是当前处理的CMakeLists.txt所在的目录;
使用-if-else的逻辑流程
https://blog.youkuaiyun.com/andrewgithub/article/details/108249065
if(expression1)
# commands ...
elseif(expression2)
# commands ...
else()
# commands ...
endif()
与、或、非:
# Logical operators
if(NOT expression)
if(expression1 AND expression2)
if(expression1 OR expression2)
# Example with parentheses
if(NOT (expression1 AND (expression2 OR expression3)))
生成某个二进制文件时设置被链接的libstdc++为静态链接模式
静态链接会直接把库大包至二进制程序中,用动态链接的话就不会(每次要动态加载)。比如本地工程要求的c++版本比较高,但是待安装的环境可能没有该版本对应的libstdc++库,从而导致程序无法运行,此时用静态库就比较方便。
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")
add_library生成的默认是静态库还是动态库
https://blog.youkuaiyun.com/HandsomeHong/article/details/122401900
add_library()命令生成的默认库类型取决于第二个参数。如果第二个参数是STATIC,则生成静态库;如果第二个参数是SHARED,则生成动态库。如果没有指定第二个参数,则默认生成静态库。
include(InstallRequiredSystemLibraries)含义
在CMake中,include(InstallRequiredSystemLibraries)是一个命令,用于包括一个模块,该模块将搜索编译器提供的系统运行库并添加安装规则。它还会自动包括MSVC MFC运行时库,并安装所有列在CMAKE_INSTALL_DEBUG_LIBRARIES和CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS中的文件到/bin(在Windows上)或/lib(在Linux和OSX上)。
file()命令读写文件、创建目录等
https://blog.youkuaiyun.com/weixin_42730667/article/details/122568165
可以通过file()命令读写文件、创建目录等,具体参考上面链接,介绍得很详细。
判断某个变量是否定义
在CMake中,可以使用if(DEFINED )来判断某个变量是否定义了。如果定义了,则返回真;否则返回假。下面是一个示例:
if(DEFINED <variable>)
message("Variable is defined.")
else()
message("Variable is not defined.")
endif()
获取顶层项目的版本号
可以使用 CMAKE_PROJECT_VERSION 变量来获取顶层项目的版本号。该变量保存了项目的版本号,由顶层 CMakeLists.txt 文件中的 project() 命令指定。如果顶层 CMakeLists.txt 包含多个 project() 调用,则最近从该顶层 CMakeLists.txt 调用的调用将确定 CMAKE_PROJECT_VERSION 包含的值。
如果您想将该变量传递到子目录中,可以使用 set 命令定义一个缓存内部变量,然后在子目录中使用该变量。例如,您可以在顶层 CMakeLists.txt 文件中定义以下内容:set(MY_PROJECT_VERSION ${CMAKE_PROJECT_VERSION} CACHE INTERNAL “”),然后在子目录中使用 ${M