問題:
假如本級目錄下有三個目錄,分別是 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)
來使得變量可以在本級和子子級目錄之間傳遞。