CMake使用總結(一)


當我們在寫CMakeLists.txt文件時,常常會搞不明白link_directories, LINK_LIBRARIES, target_link_libraries這3者的區別,下面就其詳細介紹:
 
  • INCLUDE_DIRECTORIES(添加頭文件目錄)
它相當於g++選項中的-I參數的作用,也相當於環境變量中增加路徑到CPLUS_INCLUDE_PATH變量的作用(這里特指c++。c和Java中用法類似)。
 
比如:
include_directories("/opt/MATLAB/R2012a/extern/include")
 
 
  • LINK_DIRECTORIES(添加需要鏈接的庫文件目錄)
語法:
link_directories(directory1 directory2 ...)
它相當於g++命令的-L選項的作用,也相當於環境變量中增加LD_LIBRARY_PATH的路徑的作用。
 
比如:
LINK_DIRECTORIES("/opt/MATLAB/R2012a/bin/glnxa64")
 
  • LINK_LIBRARIES (添加需要鏈接的庫文件路徑,注意這里是全路徑)
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 (設置要鏈接的庫文件的名稱)
語法:TARGET_LINK_LIBRARIES(targetlibrary1 <debug | optimized> library2 ..)
 
比如(以下寫法(包括備注中的)都可以):
TARGET_LINK_LIBRARIES(myProject hello),連接libhello.so庫
TARGET_LINK_LIBRARIES(myProject libhello.a)
TARGET_LINK_LIBRARIES(myProject libhello.so)
 
再如:
TARGET_LINK_LIBRARIES(myProject #這些庫名寫法都可以。
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM