No.1_2019-10-07 cmake 如何依赖子级目录?

问题:
假如本级目录下有三个目录,分别是 dir_a、dia_b、dir_c。它们分别生产 liba.a、libb.a、libc.a。
本级目录有一份代码,需要和这三个 .a 一起打包成一个动态库 liball.so,直接指定依赖,如果名称不是 cmake 指令定义的 TARGET,那么,会出现三个 .a 还没有被编译出来就开始编译 liball.so,结果就会是报找不到 .a 。

解决:
第一种:
1、在顶级目录的 CMakeLists.txt 把三个目录下的 target 名称,使用 set 指定;
2、子级目录建立 target 的时候,使用顶级目录的 target 名称;
3、顶级目录的 target 指定依赖这三个 target。

第二种:
1、顶级用 set 定义一个变量;
2、子目录使用 set( var ${var} target PARENT_SCOPE)指令往该变量追加自己的 target;
3、顶级链接这个变量
4、注意:如果子级不追加,而子子级目录需要追加,那么子级需要使用 set(var ${var} PARENT_SCOPE) 来使得变量可以在本级和子子级目录之间传递。

你可能感兴趣的:(No.1_2019-10-07 cmake 如何依赖子级目录?)