生活随笔
收集整理的這篇文章主要介紹了
Cmake的CMakeLists.txt写法示例
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Cmake的CMakeLists.txt寫(xiě)法示例
目錄
示例一:單文件 示例二:多個(gè)源文件 示例三:將hello.c生成一個(gè)庫(kù)來(lái)調(diào)用 示例四:工程分類(lèi)文件夾編譯 示例五:Cmake的install使用
示例一:單文件
文件名字為main.cpp,內(nèi)容如下:
#include <iostream> int main ( ) { printf ( "Hello World!\n" ) ; return 0 ;
}
CMakeLists.txt文件內(nèi)容如下,其中: a. cmake_minimum_required:對(duì)cmake的最低(高)版本的要求。 b. project:cmake工程的名稱(chēng),不是強(qiáng)制性的,最好加上。 c. set:用來(lái)定義變量。 d. add_executable:使用指定的源文件來(lái)生成目標(biāo)可執(zhí)行文件。 e. message:輸出顯示信息。
cmake_minimum_required ( VERSION
3.21 )
project ( cmake
- demo
) set ( CMAKE_CXX_STANDARD
14 ) add_executable ( $
{ PROJECT_NAME
} main
. cpp
) message ( $
{ PROJECT_NAME
} )
CMakeList.txt 文件中,命令名字是不區(qū)分大小寫(xiě)的,而參數(shù)和變量是大小寫(xiě)相關(guān)的。 編譯時(shí)在當(dāng)前目錄新建一個(gè)build目錄,進(jìn)行build目錄執(zhí)行:cmake …/ ,產(chǎn)生的臨時(shí)文件就會(huì)在build目錄下,不影響源碼目錄代碼。 最后在此目錄執(zhí)行make命令生成相應(yīng)的可執(zhí)行程序。 a. 注:clion中點(diǎn)擊執(zhí)行可自動(dòng)生成在cmake-build-debug目錄中。
示例二:多個(gè)源文件
hello.h頭文件內(nèi)容如下: void hello(const char* name); hello.cpp文件內(nèi)容:
#include <stdio.h>
#include "hello.h" void hello ( const char * name
) { printf ( "Hello my name is %s\n" , name
) ;
}
main.c文件內(nèi)容如下:
#include <iostream>
#include "hello.h" int main ( ) { printf ( "Hello World!\n" ) ; hello ( "hello" ) ; return 0 ;
}
CMakeLists.txt文件:
cmake_minimum_required ( VERSION
3.21 )
project ( cmake
- demo
) set ( CMAKE_CXX_STANDARD
14 )
set ( SRC_LIST main
. cpp hello
. cpp hello
. h
) add_executable ( $
{ PROJECT_NAME
} $
{ SRC_LIST
} ) message ( $
{ PROJECT_NAME
} )
示例三:將hello.c生成一個(gè)庫(kù)來(lái)調(diào)用
如果將hello生成成一個(gè)庫(kù)來(lái)調(diào)用的話(huà)只需要在事例二的基礎(chǔ)上修改一下CMakeLists.txt文件再進(jìn)行編譯。 修改的CMakeLists.txt如下: a. add_library:指定的源文件生成鏈接文件添加到工程中。 b. target_link_libraries:將目標(biāo)文件與庫(kù)文件進(jìn)行鏈接。
cmake_minimum_required ( VERSION
3.21 )
project ( cmake
- demo
) set ( CMAKE_CXX_STANDARD
14 )
set ( LIB_SRC hello
. cpp
)
set ( SRC_LIST main
. cpp
) add_library ( hello $
{ LIB_SRC
} ) add_executable ( $
{ PROJECT_NAME
} $
{ SRC_LIST
} ) target_link_libraries ( $
{ PROJECT_NAME
} hello
) message ( $
{ PROJECT_NAME
} )
與事例二相比,添加了一個(gè)新的目標(biāo)hello庫(kù),并將其鏈接到我們的cmake-demo程序。 然后用同樣的方法進(jìn)行cmake和make進(jìn)行編譯。
示例四:工程分類(lèi)文件夾編譯
如果代碼量比較大,會(huì)將代碼分開(kāi)放置,進(jìn)行分類(lèi),形成分成多個(gè)文件夾。
比如main.cpp程序放在app目錄下面,hello.cpp和hello.h放在libso文件夾下面。 a. 當(dāng)前文件夾有一個(gè)CMakeLists.txt文件,app和libso文件夾下面也有CMakeLists.txt文件。
首先看app文件夾的CMakeLists.txt。
project ( cmake
- demo
) include_directories ( $
{ PROJECT_SOURCE_DIR
} / . . / . . / libso
) set ( SRC_LIST main
. cpp
)
add_executable ( $
{ PROJECT_NAME
} $
{ SRC_LIST
} )
target_link_libraries ( $
{ PROJECT_NAME
} helloso
) message ( $
{ PROJECT_NAME
} )
然后看libso文件夾的CMakeLists.txt,其中SHARED表示是生成的動(dòng)態(tài)庫(kù),如果把SHARED去掉的話(huà)就是生成靜態(tài)庫(kù)。
project ( helloso
) set ( LIB_SRC hello
. cpp
)
add_library ( $
{ PROJECT_NAME
} SHARED $
{ LIB_SRC
} )
最外面文件夾的CMakeLists.txt:
cmake_minimum_required ( VERSION
3.21 )
project ( cmake
) add_subdirectory ( . / app
)
add_subdirectory ( . / libso
)
最后到build目錄下執(zhí)行 cmake …/ 和 make 進(jìn)行編譯。生成目錄如下: a. 注:clion中點(diǎn)擊執(zhí)行可自動(dòng)生成在cmake-build-debug目錄中。
示例五:Cmake的install使用
cmake中install是將編譯好的可執(zhí)行文件或者生成的庫(kù)文件放到系統(tǒng)對(duì)應(yīng)的位置,比如說(shuō)可執(zhí)行文件直接要放到bin目錄下面,so庫(kù)文件要放到對(duì)應(yīng)的lib目錄下面。 修改上面例子的CMakeLists.txt文件,編輯完成后編譯多了install步驟,這樣可以在Linux上面使用該執(zhí)行文件,執(zhí)行文件會(huì)調(diào)用so庫(kù)。即執(zhí)行命令為:
cmake
. . /
make
make install
app目錄修改的CMakeLists.txt在最后一行加上install:
project ( cmake
- demo
) include_directories ( $
{ PROJECT_SOURCE_DIR
} / . . / . . / libso
) set ( SRC_LIST main
. cpp
)
add_executable ( $
{ PROJECT_NAME
} $
{ SRC_LIST
} )
target_link_libraries ( $
{ PROJECT_NAME
} helloso
) message ( $
{ PROJECT_NAME
} ) install ( TARGETS $
{ PROJECT_NAME
} DESTINATION bin
)
libso目錄修改的CMakeLists.txt在最后一行加上install:
project ( helloso
) set ( LIB_SRC hello
. cpp
)
add_library ( $
{ PROJECT_NAME
} SHARED $
{ LIB_SRC
} ) install ( TARGETS $
{ PROJECT_NAME
} DESTINATION
. . / lib
)
解釋: a. install(TARGETS ${PROJECT_NAME} DESTINATION bin):安裝cmake-demo可執(zhí)行文件到${CMAKE_INSTALL_PREFIX}/bin目錄。 b. 可以自行打印CMAKE_INSTALL_PREFIX路徑,比如/usr/local,注意bin前面不能有/。 c. 所以執(zhí)行行文件的路徑是/usr/local/bin/,so庫(kù)文件的安裝路徑是:/usr/local/…/lib/ d. 此時(shí)可以在Linux系統(tǒng)任何目錄里執(zhí)行./cmake-demo e. 如果執(zhí)行make install的時(shí)候出現(xiàn)錯(cuò)誤,加上sudo再次執(zhí)行。
超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生
總結(jié)
以上是生活随笔 為你收集整理的Cmake的CMakeLists.txt写法示例 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。