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