cmake中,include_directories
和link_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。