CMake連結庫,會檢索庫引用標頭檔案路徑

江心岛两摩佬發表於2024-04-24

當使用CMake,target_link_libraries來連結靜態庫檔案那邊的標頭檔案路徑時,如果是跨了兩層以上(即calculter到common這樣),會導致CMake報錯。add.h沒有找到common.h標頭檔案路徑。

一般來說,編譯時候會對標頭檔案(.h)包含在原始檔(.cpp)的頭部,這時就會檢查連結庫的標頭檔案路徑。(個人猜測)

如果是這樣寫則不會報錯,也不會去檢查所連結庫的標頭檔案路徑有沒有包含在當前檔案的標頭檔案路徑。(將標頭檔案的引用寫入到原始檔裡)。

add_library(calculater STATIC calculater.cpp)
target_link_libraries(calculater PRIVATE add sub)
target_include_directories(calculater PUBLIC ./)
#include "calculater.h"
#include "add.h"
#include "sub.h"


void calcul(void) {
    int a = 5;
    int b = 2;
    
    add(a,b);
    sub(a,b);

    return;
}

當然了,也可以在連結標頭檔案路徑時使用PUIBLIC,而不是用PRIVATE。改target_link_libraries使用方法也是可以的。
PS:b站這個UP主講CMake講得非常不錯,對於新手來說。
https://www.bilibili.com/video/BV1ea4y1Q7c3?vd_source=8d73344d8e8f8345b404b0057dc8e76a

相關文章