2026/2/18 15:34:36
网站建设
项目流程
商业网站建设与维护,前端写一个页面多少钱,网站规划设计,宁波海曙网站开发公司提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录关键顺序规则#xff1a;示例说明顺序解释#xff1a;错误顺序的后果#xff1a;在 CMake 中#xff0c;target_include_directories、target_link_directories、…提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录关键顺序规则示例说明顺序解释错误顺序的后果在 CMake 中target_include_directories、target_link_directories、add_library、target_link_libraries的使用存在明确的先后顺序核心原则是先创建目标add_library再配置目标的属性target_include_directories、target_link_directories最后链接依赖target_link_libraries。同时被链接的目标如库必须在链接命令之前创建。关键顺序规则add_library必须最先执行因为target_*系列命令包括target_include_directories、target_link_directories、target_link_libraries的操作对象是“目标”如库或可执行文件必须先通过add_library或add_executable用于可执行文件创建目标否则 CMake 会报错“目标不存在”。target_include_directories和target_link_directories需在目标创建后、链接前执行这两个命令是给目标设置“编译时头文件路径”和“链接时库路径”需要在目标被链接target_link_libraries前完成配置否则可能导致编译或链接时找不到路径。target_link_libraries需在被链接的目标创建后执行如果要链接的是通过add_library创建的自定义库必须先通过add_library生成该库目标再用target_link_libraries链接否则会找不到依赖库。示例说明假设一个工程结构如下多模块项目包含一个自定义库mylib和一个依赖它的可执行文件myappproject/ ├── CMakeLists.txt ├── include/ # 公共头文件目录 │ └── mylib.h ├── src/ │ ├── mylib.cpp # 库的源文件 │ └── main.cpp # 可执行文件的源文件对应的CMakeLists.txt正确顺序如下# 1. 最低版本要求必须在 project 前 cmake_minimum_required(VERSION 3.10) # 2. 定义项目 project(MyProject LANGUAGES CXX) # -------------------------- # 步骤1创建库目标add_library 必须先执行 # -------------------------- add_library(mylib STATIC src/mylib.cpp # 库的源文件 ) # -------------------------- # 步骤2配置库的头文件路径target_include_directories 在目标创建后 # -------------------------- # 为 mylib 设置头文件目录PUBLIC 表示依赖 mylib 的目标如 myapp会自动继承该路径 target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include # 公共头文件目录 ) # -------------------------- # 步骤3创建可执行目标依赖 mylib需在链接前创建 # -------------------------- add_executable(myapp src/main.cpp # 可执行文件的源文件 ) # -------------------------- # 步骤4可选配置可执行文件的链接路径如果有额外库路径 # -------------------------- # 假设 myapp 还需要链接第三方库其路径在 ./third_party/lib target_link_directories(myapp PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/third_party/lib ) # -------------------------- # 步骤5链接依赖库target_link_libraries 在被链接目标创建后 # -------------------------- # 让 myapp 链接自定义库 mylibmylib 已通过 add_library 创建 # 同时链接第三方库如 pthread 或其他 target_link_libraries(myapp PRIVATE mylib # 自定义库必须先通过 add_library 创建 pthread # 系统库无需提前创建 )顺序解释add_library(mylib ...)先执行创建库目标mylib后续的target_include_directories(mylib ...)才能操作这个目标。target_include_directories(mylib ...)紧随其后为mylib设置头文件路径由于用了PUBLIC后续依赖mylib的myapp会自动继承这个路径无需再给myapp重复设置include目录。add_executable(myapp ...)创建可执行目标myapp是最终要生成的程序必须先创建才能对其配置链接路径和依赖。target_link_directories(myapp ...)配置链接路径如果myapp需要链接额外的第三方库需在链接前指定其路径否则链接器可能找不到库文件。target_link_libraries(myapp ...)最后链接此时mylib已存在myapp的链接路径也已配置链接操作才能正常执行。错误顺序的后果如果在add_library(mylib)之前调用target_include_directories(mylib ...)CMake 会报错Cannot specify include directories for target mylib which is not built by this project目标不存在。如果在add_library(mylib)之前调用target_link_libraries(myapp mylib)CMake 会报错Target myapp links to target mylib which is not built by this project被链接的目标不存在。因此严格遵循“先创建目标 → 再配置属性 → 最后链接依赖”的顺序是保证 CMake 脚本正确执行的基础。。