CMake交叉編譯配置

2021-09-25 11:42:53 字數 3081 閱讀 2062

羅列一下cmake常用的命令。

cmake支援大寫、小寫、混合大小寫的命令。

新增頭檔案目錄include_directories

語法:include_directories([after|before] [system] dir1 [dir2 …])

它相當於g++選項中的-i引數的作用,也相當於環境變數中增加路徑到cplus_include_path變數的作用。

include_directories(…/…/…/thirdparty/comm/include)

新增需要鏈結的庫檔案目錄link_directories

語法:link_directories(directory1 directory2 …)

它相當於g++命令的-l選項的作用,也相當於環境變數中增加ld_library_path的路徑的作用。

link_directories("/home/server/third/lib")

另外順便給大家推薦乙個交流學習群:812–855–908

3. 查詢庫所在目錄find_library

語法:ashort-hand signature is:

find_library ( name1 [path1 path2 …])

the general signature is:

find_library (

name | names name1 [name2 …] [names_per_dir]

[hints path1 [path2 … env var]]

[paths path1 [path2 … env var]]

[path_suffixes suffix1 [suffix2 …]]

[doc 「cache documentation string」]

[no_default_path]

[no_cmake_environment_path]

[no_cmake_path]

[no_system_environment_path]

[no_cmake_system_path]

[cmake_find_root_path_both | only_cmake_find_root_path | no_cmake_find_root_path]

)例子如下:

find_library(runtime_lib rt /usr/lib /usr/local/lib no_default_path)

cmake會在目錄中查詢,如果所有目錄中都沒有,值runtime_lib就會被賦為no_default_path

新增需要鏈結的庫檔案路徑link_libraries

語法:link_libraries(library1 library2 …)

link_libraries(「/home/server/third/lib/libcommon.a」)

link_libraries(iconv)

link_libraries($)

link_libraries("/opt/matlab/r2012a/bin/glnxa64/libeng.so" 「/opt/matlab/r2012a/bin/glnxa64/libmx.so」)

可以鏈結乙個,也可以多個,中間使用空格分隔.

設定要鏈結的庫檔案的名稱target_link_libraries

語法:target_link_libraries( [item1 [item2 […]]] [[debug|optimized|general] ] …)

target_link_libraries(myproject comm) # 連線libhello.so庫,預設優先鏈結動態庫

target_link_libraries(myproject libcomm.a) # 顯示指定鏈結靜態庫

target_link_libraries(myproject libcomm.so) # 顯示指定鏈結動態庫

target_link_libraries(myproject libcomm.so)  #這些庫名寫法都可以。

target_link_libraries(myproject comm)

target_link_libraries(myproject -lcomm)

6. 為工程生成目標檔案

語法:add_executable( [win32] [macosx_bundle]

[exclude_from_all]

source1 [source2 …])

簡單的例子如下:

add_executable(demo

main.cpp)

另外順便給大家推薦乙個交流學習群:812–855–908

6. 最後貼乙個完整的例子

cmake_minimum_required (version2.6)

include_directories(…/…/thirdparty/comm)

find_library(comm_lib comm …/…/thirdparty/comm/lib no_default_path)

find_library(runtime_lib rt /usr/lib /usr/local/lib no_default_path)

link_libraries($ $)

add_definitions(-o3 -g -w -wall

-wunused-variable -wunused-parameter -wunused-function-wunused

-wno-deprecated -woverloaded-virtual -wwrite-strings

-d__wur= -d_reentrant -d_file_offset_bits=64-dtixml_use_stl

)add_library(lib_demo

cmd.cpp global.cpp md5.cpp)

link_libraries(lib_demo)

add_executable(demo

main.cpp)

target_link_libraries(demo libuuid.a)

另外,使用cmake生成makefile之後,make edit_cache可以編輯編譯選項。

CMake交叉編譯配置

很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程式。裡面牽扯到相關標頭檔案的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關cmake在面對交叉編譯的時候,需要做的一些準備工作。cmake給交叉編...

CMake交叉編譯配置

很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程式。裡面牽扯到相關標頭檔案的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關cmake在面對交叉編譯的時候,需要做的一些準備工作。cmake給交叉編...

CMake交叉編譯配置

很多時候,我們在開發的時候是面對嵌入式平台,因此由於資源的限制需要用到相關的交叉編譯。即在你host宿主機上要生成target目標機的程式。裡面牽扯到相關標頭檔案的切換和編譯器的選擇以及環境變數的改變等,我今天僅僅簡單介紹下相關cmake在面對交叉編譯的時候,需要做的一些準備工作。cmake給交叉編...