做网站广州,国外做家谱的网站,小程序注册认证,用什么软件做网站好CMake是一个跨平台的构建工具#xff0c;它可以生成各种不同平台上的构建文件#xff0c;例如Makefile或Visual Studio项目文件。以下是一些常用的CMake命令#xff1a;
1. cmake_minimum_required#xff1a;指定需要的最小CMake版本。
2. project#xff1a;定义项目名…CMake是一个跨平台的构建工具它可以生成各种不同平台上的构建文件例如Makefile或Visual Studio项目文件。以下是一些常用的CMake命令
1. cmake_minimum_required指定需要的最小CMake版本。
2. project定义项目名称和版本号。
3. add_executable/add_library添加可执行文件或动态/静态库。
4. target_link_libraries链接库到目标文件中。
5. include_directories添加头文件路径。
6. link_directories添加库文件路径。
7. add_definitions添加编译器定义。
8. set设置变量的值。
9. if/else/elseif/endif条件控制语句。
10. foreach遍历列表。
11. add_custom_command / add_custom_target自定义构建命令和目标。
12. install安装生成的文件。
补充
CMake语法中预设了一些常用变量
CMAKE_MAJOR_VERSIONcmake 主版本号CMAKE_MINOR_VERSIONcmake 次版本号CMAKE_C_FLAGS设置 C 编译选项CMAKE_CXX_FLAGS设置 C 编译选项PROJECT_SOURCE_DIR工程的根目录PROJECT_BINARY_DIR运行 cmake 命令的目录CMAKE_CURRENT_SOURCE_DIR当前CMakeLists.txt 所在路径CMAKE_CURRENT_BINARY_DIR目标文件编译目录EXECUTABLE_OUTPUT_PATH重新定义目标二进制可执行文件的存放位置LIBRARY_OUTPUT_PATH重新定义目标链接库文件的存放位置
1将多个CMake文件联系到一起
在CMake中可以使用include命令将多个CMake文件联系到一起。
例如假设我们有这样的目录结构 project/ CMakeLists.txt src/ CMakeLists.txt main.cpp libs/ library1/ CMakeLists.txt src/ foo.cpp include/ lib1/ foo.h library2/ CMakeLists.txt src/ bar.cpp include/ lib2/ bar.h
我们需要在顶级CMake文件中包含所有子CMake文件。我们可以这样做
cmake # Top-level CMakeLists.txt
# Include libraries add_subdirectory(libs/library1) add_subdirectory(libs/library2)
# Include source directory add_subdirectory(src)
在每个库和源码目录中有一个CMakeLists.txt文件来处理该目录中的内容。包含库的CMakeLists.txt看起来像这样
cmake # libs/library1/CMakeLists.txt
# Define library add_library(library1 src/foo.cpp) target_include_directories(library1 PUBLIC include)
# Install library install(TARGETS library1 ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin) install(DIRECTORY include/ DESTINATION include/lib1)
这将定义名为library1的库并将其包含路径添加到PUBLIC接口中。它还将该库安装到适当的目录并将include/lib1安装到包含所有头文件的目录中。
源码目录的CMakeLists.txt可能如下所示
cmake # src/CMakeLists.txt
# Define executable add_executable(my_program main.cpp)
# Link libraries target_link_libraries(my_program library1 library2)
这将定义一个可执行文件my_program并将library1和library2链接到该文件中。
使用include命令在顶级CMakeLists.txt中包含所有子CMakeLists.txt文件将确保所有代码都被正确构建并链接。
(2) CMake链接动态库和静态库 静态库在CMake中可以使用add_library命令来创建一个静态库并使用target_link_libraries命令将其链接到可执行文件或其他库中。
假设我们有一个名为my_library的静态库我们想将其链接到名为my_executable的可执行文件中。我们可以这样做
cmake # CMakeLists.txt
# Define static library add_library(my_library STATIC library_source_1.cpp library_source_2.cpp )
# Define executable and link libraries add_executable(my_executable main.cpp ) target_link_libraries(my_executable my_library )
在这个例子中add_library命令创建一个名为my_library的静态库并列出了该库的源文件。add_executable命令创建一个名为my_executable的可执行文件并列出了该文件的源文件。target_link_libraries命令将my_library库链接到my_executable可执行文件中。
如果静态库是在不同目录中定义的可以使用find_library命令来查找并链接该库
cmake find_library(MY_LIBRARY my_library PATHS path/to/my/library) target_link_libraries(my_executable ${MY_LIBRARY})
这将在path/to/my/library目录中查找名为my_library的静态库并将其链接到my_executable可执行文件中。
静态库的链接顺序很重要因为每个库都可能依赖于其他库。如果静态库A依赖于静态库B则必须首先将静态库B链接到可执行文件或其他库中然后再将静态库A链接到其后面。
动态库
CMake可以使用target_link_libraries命令链接动态库。以下是一个将动态库链接到可执行文件中的示例
cmake cmake_minimum_required(VERSION 3.0) project(my_project)
# 设置可执行文件名称 set(EXECUTABLE_NAME my_app)
# 设置源文件 set(SOURCE_FILES main.cpp)
# 查找动态库 find_library(MY_LIB my_lib PATHS /path/to/lib)
# 添加可执行文件 add_executable(${EXECUTABLE_NAME} ${SOURCE_FILES})
# 链接动态库 target_link_libraries(${EXECUTABLE_NAME} ${MY_LIB})
在这个示例中find_library命令用于查找名为my_lib的动态库。target_link_libraries命令用于将my_lib动态库链接到可执行文件中。