上一篇文章中,我們製作了一個archive文件,那接下來就是如何使用它了。首先來看一下程序的目錄結構
t2
├── build
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.c
最外層的CMakeLists.txt中內容爲
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(MA52103231)
CMAKE_POLICY(SET CMP0002 OLD)#CMP0002 OLD的概念見下文
CMAKE_POLICY(SET CMP0015 NEW)#CMP0015 NEW的概念見下文
ADD_SUBDIRECTORY(src construct)
依然如此簡單,清晰src/CMakeLists.txt中的內容爲
AUX_SOURCE_DIRECTORY(. all_sources)#將當前目錄(.)下的所有源文件(*.c *.cpp)加入到變量all_sources中
ADD_EXECUTABLE(myexpect ${all_sources})#聲明要用所有的源文件生成一個可執行程序myexpect
INCLUDE_DIRECTORIES(../../t1/build/include)#定義了源文件中要使用的某些h文件的所在路徑,這個路徑使用了當前目錄的前綴,
#而當前目錄就是當前CMakeLists.txt所在目錄
LINK_DIRECTORIES(../../t1/build/libstatic)#這個其實也是使用了當前目錄的概念,不過需要使用CMP0015 NEW這個規則,否則,我還真找不到當前目錄是哪個
TARGET_LINK_LIBRARIES(myexpect core)#定義我們的可執行程序要鏈接的庫,此處是core(默認是動態庫,不過目標文件裏面只有靜態庫,所以就鏈接靜態庫了,假設
#動態庫和靜態庫都存在,那就指定具體的名字,比如libcore.a 或者 libcore.so)
ADD_EXECUTABLE(myexpect ${all_sources})#此處再次使用了這句話,是爲了解決cmake的一個問題(沒有這句的LINK_DIRECTORIES這句話會不起作用)。同時,如果不用時
#規則CMP0002 OLD的話,在build目錄執行cmkae ..時會因爲有兩句同樣的ADD_EXECUTABLE而停止工作
main.c中的內容
#include <core.h>
int main(int argc, char** argv)
{
core_help();
return 0;
}
很簡單
在build目錄執行cmake .. 後再執行make,build目錄會生成如下文件
CMakeCache.txt CMakeFiles cmake_install.cmake construct Makefile
我們的可執行程序就在construct目錄中了
CMakeFiles cmake_install.cmake Makefile myexpect
執行它得到
root@hu-virtual-machine:/home/hu/project/test_cmake/t2/build/construct# ./myexpect
my help