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
相关文章
相关标签/搜索