zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++-Cmake指令:add_dependencies【当一个项目构建的时候,由于依赖关系的存在,所以被依赖的项目总是最先构建,这样就不会出现找不到库而报错】

C++项目依赖 报错 一个 构建 出现 关系
2023-09-27 14:20:39 时间

一、问题引入

在项目中通常会遇见这样的情况:(例如一个项目中有:main,libhello.a, libworld.a),当项目过小的时候,编译顺序是*.a,然后是main,

但是当一个项目的文件过于庞大,就会导致编译的顺序不会按照主CMAKE的add_subdirectory引入的先后顺序,为了解决这一问题,就需要使用add_dependencies进行依赖指定。
 

二、问题解决

该样例的工程结构如下

├── CMakeLists.txt// 下面用主CMAKE表示
├── hello
│   ├── CMakeLists.txt		// 下面用HELLOCMAKE表示
│   ├── hello.c
│   └── hello.h
├── main
│   ├── CMakeLists.txt		// 下面用MAINCMAKE表示
│   └── main.c
└── world
    ├── CMakeLists.txt		// 下面用WORLDCMAKE表示
    ├── world.c
    └── world.h

HELLOCMAKE的内容:

cmake_minimum_required(VERSION 3.5.1)

set(CMAKE_C_STANDARD 99)

add_library(hello STATIC world.c hello.h)

MAINCMAKE的内容

cmake_minimum_required(VERSION 3.5.1)
project(CmakeDemo C)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY /home/lib)
set(CMAKE_C_STANDARD 99)

add_executable(CmakeDemo main.c)

link_directories(/home/lib)

target_link_libraries(
        CmakeDemo
        hello
        world
)

WORLDCMAKE的内容

cmake_minimum_required(VERSION 3.5.1)

set(CMAKE_C_STANDARD 99)

add_library(world STATIC world.c world.h)

主CMAKE的内容

cmake_minimum_required(VERSION 3.5)

add_subdirectory(main)
add_subdirectory(hello)
add_subdirectory(world)

add_dependencies(CmakeDemo hello world)

注意点提示:

  • 该示例中只有在主CMAKE中使用到add_dependencies。
  • add_dependencies中所填写的名字应该是其他CMAKE生成目标的名字。
  • 该示例中如果写成add_dependencies(CmakeDemo libhello.a libworld.a)则会报错。

三、总结

这样写的好处在于,当一个项目构建的时候,由于依赖关系的存在,所以被依赖的项目总是最先构建,这样就不会出现找不到库而报错。

CMAKE之add_dependencies使用_BeanGuohui的博客-CSDN博客