參考文章:https://www.cnblogs.com/hackcode/p/6050159.html
當(dāng)我們?cè)趯慍MakeLists.txt文件時(shí)荡陷,常常會(huì)搞不明白link_directories, LINK_LIBRARIES, target_link_libraries這3者的區(qū)別,下面就其詳細(xì)介紹:
- INCLUDE_DIRECTORIES(添加頭文件目錄)
它相當(dāng)于g++選項(xiàng)中的-I參數(shù)的作用,也相當(dāng)于環(huán)境變量中增加路徑到CPLUS_INCLUDE_PATH變量的作用(這里特指c++缭保。c和Java中用法類似)券坞。
比如:
include_directories("/opt/MATLAB/R2012a/extern/include")
- LINK_DIRECTORIES(添加需要鏈接的庫(kù)文件目錄)
語(yǔ)法:
link_directories(directory1 directory2 ...)
它相當(dāng)于g++命令的-L選項(xiàng)的作用沼瘫,也相當(dāng)于環(huán)境變量中增加LD_LIBRARY_PATH的路徑的作用。
比如:
LINK_DIRECTORIES("/opt/MATLAB/R2012a/bin/glnxa64")
- LINK_LIBRARIES∝酝!(添加需要鏈接的庫(kù)文件路徑向胡,注意這里是全路徑)
List of direct link dependencies.
比如:
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so")
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
也可以寫成:
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
- TARGET_LINK_LIBRARIES (設(shè)置要鏈接的庫(kù)文件的名稱)
語(yǔ)法:TARGET_LINK_LIBRARIES(targetlibrary1 <debug | optimized> library2 ..)
比如(以下寫法(包括備注中的)都可以):
TARGET_LINK_LIBRARIES(myProject hello),連接libhello.so庫(kù)
TARGET_LINK_LIBRARIES(myProject libhello.a)
TARGET_LINK_LIBRARIES(myProject libhello.so)
再如:
TARGET_LINK_LIBRARIES(myProject #這些庫(kù)名寫法都可以惊完。
TARGET_LINK_LIBRARIES(myProject TARGET_LINK_LIBRARIES(myProject -leng)
CMakeLists文件鏈接方式有如下2種:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
include_directories(``"/opt/MATLAB/R2012a/extern/include"``)
LINK_DIRECTORIES(``"/opt/MATLAB/R2012a/bin/glnxa64"``)
add_executable(myProject main.cpp)
target_link_libraries(myProject eng mx)
#equals to below
#target_link_libraries(myProject -leng -lmx) `
#target_link_libraries(myProject libeng.so libmx.so)`
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
include_directories(``"/opt/MATLAB/R2012a/extern/include"``)
#directly link to the libraries.
LINK_LIBRARIES(``"/opt/MATLAB/R2012a/bin/glnxa64/libeng.so"``)
LINK_LIBRARIES(``"/opt/MATLAB/R2012a/bin/glnxa64/libmx.so"``)
#equals to below
#LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
add_executable(myProject main.cpp)