【Cmake】link_directories設置BEFORE參數無效的原因

cmake中,include_directorieslink_directories默認是按照append的方式添加搜索路徑的。也就是說,先添加的directories,在頭文件/庫文件搜索順序中排在前面。

如果想要改變這種排序,後添加的directories排在前面,有兩種方法。一個是添加BEFORE參數,另一個是設置CMAKE_INCLUDE_DIRECTORIES_BEFORE/CMAKE_LINK_DIRECTORIES_BEFORE

https://cmake.org/cmake/help/v3.0/command/include_directories.html

include_directories(BEFORE xxx)

等價於

set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON)
#之後的include_directories都排在前面,之前的include_directories順序不變。
include_directories( xxx)

link_directories也是一樣的寫法。

但是我在使用了這個寫法之後,發現include_directories的順序確實改變了,但是link_directories沒有生效。打印link_directories:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY LINK_DIRECTORIES)

message(STATUS "link_directories:")
foreach (dir ${dirs})
    message(STATUS "    '${dir}'")
endforeach ()

我的link_directories的輸出是

${CMAKE_SOURCE_DIR}/BEFORE

顯然,cmake沒有識別到BEFORE這個參數,而是當成了一個目錄。

解決:升級cmake版本到3.16。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章