cmake

一:添加源文件:

cmake_minimum_required (VERSION 3.8)

project ("CMakeProject3")

或者

project ("CMakeProject2" VERSION 1.0 LANGUAGES C)

# 包含子项目。主要会执行 指定目录中的(必须有) CMakeLists.txt;
add_subdirectory ("CMakeProject3") 

一般简单工程不需要这个,直接通过下面的方法添加执行就可以了;

//当前 源文件 目录;

# CMakeList.txt: CMakeProject3 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

# 将源代码添加到此项目的可执行文件,如 mian 函数文件。
#add_executable (CMakeProject3 "CMakeProject3.cpp" "CMakeProject3.h")


# TODO: 如有需要,请添加测试并安装目标。

//添加当前目录中的 include 目录 为头文件目录;

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) 

//将当前目录中的 c 或者 cpp 文件赋值到 变量 DIR_SRCS 中;如果有多个目录,就需要多个函数多个变量;

aux_source_directory(. DIR_SRCS) 
#add_executable (CMakeProject3 ${DIR_SRCS})  //编译执行c,cpp文件 

#通过这个方法,可以直接获取当前目录和子目录中的指定类型文件,保存到相关变量中;

#不需要 add_subdirectory ;

//

如下方法是通过 通配符将 相关类型 文件放到 变量中,然执行;和 include_directories,aux_source_directory 差不多,但是这两个函数更简洁和更多目录;

file(GLOB_RECURSE SOURCES "*.cpp")
file(GLOB_RECURSE HEADERS "*.h")
add_executable (CMakeProject3 ${SOURCES} ${HEADERS})

或者:

set(SOURCE_FILES
    api/test/create_frame_generator.cc
    media/base/fake_frame_source.cc
    pc/test/fake_audio_capture_module.cc
)

参考 mediasoupclient 中的cmakelists.txt  ,或者从 GitHub 上找一个开源的参考也很好;


#1
#target_sources(CMakeProject3 PRIVATE  ./Test/test2.h)
#target_sources(CMakeProject3 PRIVATE  ./Test/test2.cpp)

#2
#target_sources(CMakeProject3 PRIVATE  ./Test/test2.h ./Test/test2.cpp)

#3
#aux_source_directory(./Test DIR_SRCS_2)
#target_sources(CMakeProject3 PRIVATE ${DIR_SRCS_2})

#target_sources(CMakeProject3 ${DIR_SRCS})

二:简单示例:

将当前目录 c,c++ 文件作为 cmake 工程;

CMakeLists.txt

cmake_minimum_required (VERSION 3.8)

project ("testproject")

include_directories(${CMAKE_CURRENT_SOURCE_DIR})

aux_source_directory(. _SOURCES)

#设置工程中的一些宏定义;

#add_definitions(-Dhongidngy)

#设置 Release,设置 MT;

if(0)
set(CMAKE_BUILD_TYPE "Release") 
#
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")

endif()

# 将源代码添加到此项目的可执行文件。

#可执行文件;
add_executable (testproject ${_SOURCES})

#静态库;
#add_library( testproject STATIC ${_SOURCES})

三:简单示例: 调用 静态库

# CMakeList.txt: decode2 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#

# 将源代码添加到此项目的可执行文件。

cmake_minimum_required (VERSION 3.8)

project ("decode2")

#SET(CMAKE_BUILD_TYPE "Release")


#指定C/C++版本
set(CMAKE_C_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_CXX_EXTENSIONS OFF)



#宏定义
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-DBUILDING_ENCODE1)


#文件包含;

include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)


aux_source_directory(. _SOURCES)



# 设置项目库文件搜索路径 -L
#link_directories(.)
link_directories(${PROJECT_SOURCE_DIR}/lib)

#直接用 target_link_libraries 也可以,这里就不需要了;
#link_libraries(decode2 testlib)

#生成程序:
#静态库;
#add_library( testproject STATIC ${_SOURCES})

# {
#动态库;
#add_library(decode2 SHARED ${_SOURCES})

#导出 dll 类文件,暂时不用;
#set_target_properties(renderEncode1 PROPERTIES  PUBLIC_HEADER "encode_1.h")

#可执行文件;
#{

add_executable (decode2 ${_SOURCES})
# 传递参数给可执行文件
# }




#添加 lib 文件;
#静态库 Windows ,Linux 都可以;
target_link_libraries(decode2 PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/lib/test-linux.a)
#target_link_libraries(decode2  test)
#target_link_libraries(decode2 ${CMAKE_CURRENT_SOURCE_DIR}/lib/test.lib)


target_link_libraries(decode2 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib/test.a)


在 vscode 中调试:

在 Windows 中,可以直接用 visual studio 打开 cmake 文件夹;

在 Ubuntu 中,安装 vscode ,安装  c++ ,cmake , 和 vs cmake c++ 相关 plugin;

特别需要说明:

建立一个文件夹,放入 cmakelist.txt 和 相关 c,cpp,h文件;

vs code 打开相关文件夹,右键 CMakeLIsts.txt 可以 config 和 编译工程;

调试:

这里有几篇简单文章,可以参考:

CMake简明教程(中文版) - 知乎

CMake简明教程 | Jason's Blog

【C++编译】cmake简明教程 | 王德发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chinabinlang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值