C++-Cmake指令:add_dependencies【当一个项目构建的时候,由于依赖关系的存在,所以被依赖的项目总是最先构建,这样就不会出现找不到库而报错】
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)则会报错。
三、总结
这样写的好处在于,当一个项目构建的时候,由于依赖关系的存在,所以被依赖的项目总是最先构建,这样就不会出现找不到库而报错。
相关文章
- 猿创征文|【C++实战小项目】通讯录(一) 纯数组实现基本通讯录模拟详解
- JAVA Socket编程和C++ Socket编程有什么不同
- 【C/C++开发】值得学习的C语言开源项目
- VC++非MFC项目中如何使用TRACE宏
- 在VS2010 VC++项目中引用Lib静态库(以Openssl为例)
- Github上的几个C++开源项目
- Github上的几个C++开源项目
- 优秀c++开源项目集合
- 可能是国内最火的开源项目 —— C/C++ 篇
- 《c语言项目》学生成绩管理系统(devc++)
- cocos2d-x 3.x lua的api与C++的关系
- VC++、MFC最好的开源项目
- Eclipse C/C++环境配置
- VC++非MFC项目中如何使用TRACE宏
- c++多线程编程之互斥对象(锁)的使用之----死锁
- C++小项目-吃豆子游戏
- 在Linux中使用VS Code编译调试C++项目
- 值得推荐的开源C/C++框架和库
- C++MFC编程笔记day05 文档类-单文档和多文档应用程序