如我们写好源代码和主函数,可以不使用 IDE 直接用命令行编译成可执行文件。比如需要提供一个工具程序提供给后端通过命令行调用。可能有的人认为直接编译成可执行文件给别人不就 OK 了吗?
但问题来了,你本地编译的平台和架构可能和别人的不一样,直接给别人编译好的可执行文件可能跑不起来,举个栗子,我本地是 Mac 电脑,我编译好的执行文件在 Mac 电脑上跑没问题,但服务端同学是 Linux 的就跑不起来。
所以我们写好编译脚本把源码给他们,他们基于自己的平台编译就 OK 了。
比如,源码结构如下:
├── source
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── main.cpp
│ └── utils
│ ├── STAudioUtils.cpp
│ ├── STAudioUtils.h
│ ├── WaveFile.cpp
│ └── WaveFile.h
编译脚本,CMakeLists 如下:
# 指定 cmake 版本,跟安装的版本保持一致
cmake_minimum_required(VERSION 3.4.1)
# 指定 c++ 标准
set(CMAKE_CXX_STANDARD 11)
# 输出编译信息
message("Hello Alan!!! Start compile!")
# 设置源码根路径,即 cpp 目录
set(SRC_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
message(${SRC_ROOT_PATH})
# 定义要编译的文件列表变量
file(GLOB CPP_FILES_IN_UTILS "${SRC_ROOT_PATH}/utils/*.cpp")
# 设置要编译的源文件
set(
SOURCE_FILES
${CPP_FILES_IN_UTILS}
${SRC_ROOT_PATH}/main.cpp
)
# include 头文件目录
include_directories(${SRC_ROOT_PATH}/)
# 编译成可执行文件,如果编译动态库可以用:target_link_libraries
add_executable(audio_tool ${SOURCE_FILES})
编译步骤:
cd source (CMakeLists.txt 所在目录)
cmake .
make
执行:cmake .
再执行:make
编译出最终的可执行文件:audio_tool(在 CMakeLists 的 add_executable 指定的)
使用时根据自己的 main 函数用就可以,比如要带一个参数,执行如下:
./audio_tool ../test/test.wav