參考鏈接:
- CMake
- CMake and Visual Studio | Cognitive Waves
- Clang C Language Family Frontend for LLVM
- CMake快速入門教程:實戰 - IT由零開始 - 博客園
- CMake 入門實戰 | HaHack
快速入門
cmake vs visual studio
參照visual studio來記住cmake的相關命令
VISUAL STUDIO | CMAKE COMMAND |
---|---|
Solution file (.sln) | project |
Project file (.vcproj) | target name in the command add_executable or add_library |
executable (.exe) | add_executable |
static library (.lib) | add_library |
dynamic library (.dll) | add_library(SHARED) |
Source Folders | source_group |
Project Folders | set_property(TARGET PROPERTY FOLDER) |
Properties->General->Output Directory | set_target_properties(PROPERTIES RUNTIME_OUTPUT_DIRECTORY) |
Properties->C/C+±>Preprocessor->Preprocessor Definitions | add_definitions |
Properties->C/C+±>General->Additional Include Directories | include_directories |
Properties->Linker->General->Additional Library Directories | link_directories |
Properties->Linker->Input->Additional Dependencies | target_link_libraries |
快速入門
- 環境:
win10
visual studio code
wsl
linux
- 創建
main.cpp
, 創建簡單的 c++ hello world
#include <iostream>
int main(int argc,char* args[])
{
std::cout<<"Hello World!"<<std::endl;
return 0;
}
- 在同級源文件夾下面創建
CMakeLists.txt
# cmake 最低支持的版本
cmake_minimum_required(VERSION 3.0)
# 工程名稱
project (cmake_tutorial)
# 添加源文件的文件夾 到DIR_SRCS的變量裏面
aux_source_directory(. DIR_SRCS)
# 生成運行文件 使用DIR_SRCS裏面爲源文件
add_executable(main ${DIR_SRCS})
- 在vs code的terminal中使用wsl(linux子系統),輸入
cmake .
,然後再輸入make
,就能看見輸出的main
執行文件 - 輸入
./main
,看到Hello World!
輸出成功,即成功跑通cmake的第一個示例程序。在windows下使用類似,make
命令需要更換成msbuild
或者直接使用visual studio
編譯。
cmake 子目錄
- 創建
TestDir
子目錄,創建Test.h
Test.cpp
文件
\\Test.h
class Test
{
public:
int add(int a,int b);
};
\\Test.cpp
#include "Test.h"
int Test::add(int a,int b)
{
return a+b;
}
- 在
TestDir
中創建CMakeLists.txt
文件,在cmake
工程中,每一級文件夾都建議創建一個CMakeLists.txt
文件
#生成靜態庫
add_library(Test Test.cpp)
- 回到
main.cpp
同級目錄,修改CMakeLists.txt
文件
# cmake 最低支持的版本
cmake_minimum_required(VERSION 3.0)
# 工程名稱
project (cmake_tutorial)
# 添加源文件的文件夾 到DIR_SRCS的變量裏面
aux_source_directory(. DIR_SRCS)
# 添加子目錄
add_subdirectory(TestDir)
# 生成運行文件 使用DIR_SRCS裏面爲源文件
add_executable(main ${DIR_SRCS})
# 添加Test靜態庫
target_link_libraries(main Test)
- 修改
main.cpp
文件
#include <iostream>
#include "TestDir/Test.h"
int main(int argc,char* args[])
{
Test* test=new Test();
int result=test->add(100,102);
std::cout<<"Hello World!"<<"Test add Result:"<< result <<std::endl;
return 0;
}
- 如上面生成測試,成功輸出:
Hello World!Test add Result:202
。這樣在不使用visual studio
的環境下,也能成功實現了一個自動管理的構建系統,並且支持跨平臺。