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 $)#宣告要用所有的原始檔生成乙個可執行程式myexpect
include_directories(../../t1/build/include)#定義了原始檔中要使用的某些**件的所在路徑,這個路徑使用了當前目錄的字首,
#而當前目錄就是當前cmakelists.txt所在目錄
link_directories(../../t1/build/libstatic)#這個其實也是使用了當前目錄的概念,不過需要使用cmp0015 new這個規則,否則,我還真找不到當前目錄是哪個
target_link_libraries(myexpect core)#定義我們的可執行程式要鏈結的庫,此處是core(預設是動態庫,不過目標檔案裡面只有靜態庫,所以就鏈結靜態庫了,假設
#動態庫和靜態庫都存在,那就指定具體的名字,比如libcore.a 或者 libcore.so)
add_executable(myexpect $)#此處再次使用了這句話,是為了解決cmake的乙個問題(沒有這句的link_directories這句話會不起作用)。同時,如果不用時
#規則cmp0002 old的話,在build目錄執行cmkae ..時會因為有兩句同樣的add_executable而停止工作
main.c中的內容
#include int main(int argc, char** ar**)
很簡單
在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
cmake編譯動態庫和靜態庫
cmake minimum required version 2.6 project hello 新增原始檔 aux source directory dir srcs 設定編譯引數 set cmake c flags g wall 新增標頭檔案路徑 include directories incl...
cmake學習(一)靜態庫與動態庫構建
so 共享庫,shared object 節省空間,在執行時去連線,如果執行機器上沒有這些庫檔案就不能執行。a 靜態庫,archive 靜態庫和程式化為一體,不會分開。通過 ldd命令可以檢視乙個可執行程式所依賴的的共享庫。使用環境變數ld library directory可以指定共享庫位置 一 ...
cmake中使用so庫
cmake minimum required version 2.0 project cmaketest 標頭檔案搜尋路徑 include directories home user cvcode slambook ch2 庫檔案搜尋路徑 link directories home user cvc...