CMake使用介紹(2)

2021-10-08 18:59:36 字數 4195 閱讀 2836

實際使用過程中,尤其是嵌入式開發中,經常需要使用到交叉編譯,這時就要將系統預設編譯器切換到相對應的使用到的編譯器,常用的編譯器設定主要由一下幾種方法:

1:修改系統環境

變數,修改預設編譯器為需要使用到的編譯器

export

cc=<

c編譯器

>   

cxx=<

c++編譯器

>

其中cc

是設定gcc

編譯器,而

cxx是設定

g++編譯器,

可以帶絕對

路徑。

該方法缺點

:會影響整個系統預設

編譯器,使用完成之後需要恢復。 2:

cmake

-d命令設定編譯器

通過cmake命令列,在執行時,使用

-d 設定

cmake_foo_compiler

變數值為有效的編譯器名稱或者全

路徑。

cmake

-d cmake_c_compiler

=<

c編譯器

>

cmake_cxx_compiler

==<

c++編譯器

>

3:使用cmake set命令設定

使用set命令在cmakelist.txt設定cmake__

compile

系列變數指定編譯器: 例如

設定c

及c++

編譯器:

set(cmake_c_compiler 「

編譯器絕對路徑」)

set(cmake_cxx_compiler 「

編譯器絕對路徑」)

通過設定cmake_c_compiler和cmake_cxx_compiler變數強制修改編譯器。

實際構建編譯系統是,經常需要對編譯器設定各種各樣編譯器選項,cmake中主要由以下幾種方法設定:

1:使用cmake set命令設定

可以使用

set命令設定

cmake_>_

flags

系列指定編譯器選項:

set(cmake_c_flags 

編譯器選項)

set(cmake_cxx_flags

編譯器選項)

由於上述變數為cache變數,故全域性有效,包括編譯鏈結階段,可以分別針對c/c++進行設定

2:add_definitions命令

add_definition命令針對的是編譯選項中的-d自定義編譯選項,例如自定義編譯選項foo 和bar, 可以使用如下命令

add_definitions

(-dfoo -dbar ...)

該命令的有效範圍僅在當前目錄或者當前

目錄以下的

目錄。

該命令設定之後,會對c和c++編譯器都有效。

3:add_compile_option命令

add_compile_option命令可以針對自定義編譯選項和標準編譯器選項flag:

add_compile_options

(...)

有效範圍為 在當前目錄或者當前

目錄以下的目錄。該命令

只在編譯階段不影響鏈結階段。

可以使用標準和非標準編譯選項,同樣也會新增到所有編譯器選項中。

例如:

add_definitions(-

std=

c++11

)

4:t

arget_compile_definitions命令

該命令主要是針對target有效,命令列格式為:

target_compile_definitions(

<

inte***ce|public|private> [items1...]

[[items2...] ...])

必須是

add_executable

() 或者

add_library

() 建立,影響編譯階段不影響鏈結階段。

會新增所有編譯器選項。

inte***ce|public|private

為不同作用域

private

和 public

項將產生

的 compile_definitions 屬性。

public

和 inte***ce

項將產生

的inte***ce_compile_definitions

屬性

新增頭檔案目錄主要由以下幾種方法

1:通過編譯選項

–i 指定頭檔案目錄

2:通過

include_directories

指令

include_directories

([after|before] [system] dir1 [dir2

...])

該命令有效範圍為在當前目錄或者當前

目錄以下的目錄。該命令

只在編譯階段不影響鏈結階段。

3:通過

target_include_directories

指令

target_include_directories

([system] [before]

[items1...]

[[items2...] ...])

生成動態或者靜態庫主要使用

add_library

命令

add_library

([static | shared | module]

[exclude_from_all]

[source1] [source2 ...])

其中

ø static

:生成靜態庫 ø

shared:  

生成動態庫 ø

module: 一

種不會被鏈結到其它目標中的外掛程式,但是可能會在執行時使用

dlopen

-系列的函式

新增第三方庫主要由以下幾種方法:

1:設定編譯器選項通過

-l<

庫名》 2:

使用target_link_libraries

target_link_libraries

(... ... ...)

例如:

target_link_libraries

(myproject

comm

)      

# 連線

libhello.so

庫,預設優先鏈結動態庫

target_link_libraries

(myproject

libcomm.a

)  #

顯示指定鏈結靜態庫

target_link_libraries

(myproject

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

3:使用link_libraries命令字段

link_libraries

([item1 [item2 [...]]]

[[debug|optimized|general

] ] ...)

新增 第三方庫是經常需要新增第三方庫路徑,以能夠鏈結到相應的第三方庫

新增第三方庫主要由以下幾種方法:

1: 設定編譯器選項通過

-l<

庫名》2:使用link_directories命令字段

link_directories

([after|before] directory1 [directory2 ...])

《mastering cmake》 

專案構建工具介紹(推薦使用cmake)

cmakelists.txt檔案,個人感覺是最好用的工具,支援多種ide的專案構建,而且vscode上面有相關外掛程式支援命令提示 project test aux source directory src code add executable test cmake多個編譯同時編譯可能不穩定,會出...

cmake簡單入門2

cmake 最低版本要求 cmake minimum required version 2.8 專案名稱 project main 是否使用自己的 tools 庫 option use mymath use provided math implementation on 是否加入 mathfunct...

cmake使用範例

cmake作為一款跨平台的專案構建工具,其使用範圍已經越來越廣,本文以實際專案為例,展示乙個使用該編譯工具的模板。希望我們都能在這些高效的工具幫助下都享受程式設計的樂趣。project src libs modules includes build bin cmakelists 根目錄下cmakel...