CMake实践(4)
一,本期目标:
[sun@localhost t4]$ cat README
任务:如何使用外部共享库和文件
二,目录结构
[sun@localhost t4]$ tree ../t4
../t4
├── CMakeLists.txt
├── README
└── src
├── CMakeLists.txt
└── main.cpp
1 directory, 4 files
三,CMakeLists.txt
[sun@localhost t4]$ cat CMakeLists.txt
PROJECT(NEW_HELLO)
cmake_minimum_required(VERSION 2.6)
ADD_SUBDIRECTORY(src)
[sun@localhost t4]$ cat src/CMakeLists.txt
PROJECT(main)
#注意:如果工程有依赖库的话,ADD_EXECUTABLE指令要放在LINK_DIRECTORIES指令之后,
# 不然会报错:Linking C executable main
# /usr/bin/ld: cannot find -lhello
# collect2: ld 返回 1
#ADD_EXECUTABLE(main main.cpp)
#1)增加头文件搜索路径,解决编译期间找不到头文件的问题
INCLUDE_DIRECTORIES(../../t3/lib)
#2)增加库文件: 解决链接期间找不到调用外部接口的问题
#main.cpp:(.text+0x5): undefined reference to `HelloFunc()'
#collect2: error: ld returned 1 exit status
#3)增加库文件搜索路径:解决链接期间找不到库文件的问题
#/usr/bin/ld: cannot find -lhello
#collect2: error: ld returned 1 exit status
#好像相对路径会找不到库文件
LINK_DIRECTORIES(../../t3/lib /home/TOM/cmake_practice/cmake/t3/lib)
ADD_EXECUTABLE(${PROJECT_NAME} main.cpp)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} hello) #链接动态库指令
#TARGET_LINK_LIBRARIES(${PROJECT_NAME} libhello.a) #链接静态库指令
#COMMAND: INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dire1 dire2 ...)
#定义:向工程添加多个特定的头文件搜索路径,路径之间用空格分开,
# 如果路径中包含空格,可以使用双引号括起来
# 默认是追加到当前的头文件搜索路径之后,你可以用2种方式控制搜索路径的添加方式
# 1)CMAKE_INCLUDE_DIRECTORIES_BEFORE 通过SET设置其为on,使用前置模式
# 2)通过AFTER或BEFORE参数,控制追加还是置前
#COMMAND: LINK_DIRECTORIES(dir1 dir2 ...)
#定义:添加非标准的共享库搜索路径
#COMMAND: TARGET_LINK_LIBRARIES(target library1
# <debug | optimized> library2
# ...)
#定义:用来为target添加需要链接的共享库
四,运行结果:
(略)