手撕cmake工程模板(含静态库)

典型cmake工程目录结构(含静态库)
.
├── build                          # 编号01 mkdir build
├── CMakeLists.txt                 # 编号02 touch CMakeLists.txt
├── config                         # 编号03 mkdir config && cd config
│   ├── config.hpp                 # 编号04 这个文件是用ccmake ..命令生成的
│   └── config.hpp.in              # 编号05 touch config.hpp.in
├── libs                           # 编号06 mkdir libs && cd libs
│   ├── lib1                       # 编号07 mkdir lib1 && cd lib1
│   │   ├── lib1.hpp               # 编号08 touch lib1.hpp
│   │   └── liblib1.a              # 编号09 这个文件是前一篇博文中生成的静态库文件
│   └── lib2                       # 编号10 mkdir lib2 && cd lib2
│       ├── lib2.hpp               # 编号11 touch lib2.hpp
│       └── liblib2.a              # 编号12 这个文件是前一篇博文中生成的静态库文件
└── src                            # 编号13 mkdir src && cd src
    ├── CMakeLists.txt             # 编号14 touch CMakeLists.txt
    └── demo5.cpp                  # 编号15 touch demo5.cpp
编译运行命令
cd build

# 设置USE_MYMATH = ON/OFF
ccmake ..

# 生成makefile文件夹
cmake ..

# 编译工程
make

# 执行命令: cmd p1 p2
./bin/demo5 5 2
详细代码内容(部分编号是目录或者自动生成的代码)
编号02文件内容
cmake_minimum_required (VERSION 3.5.1)

project (demo5)

add_subdirectory (./src)
编号05文件内容
#cmakedefine USE_MYMATH
编号08文件内容
#ifndef LIB1_HPP
#define LIB1_HPP

double myadd(double a, double b);

#endif  //LIB1_HPP
编号11文件内容
#ifndef LIB2_HPP
#define LIB2_HPP

double mypower(double base, double ex);

#endif //LIB2_HPP
编号14文件内容
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

include_directories (${PROJECT_SOURCE_DIR}/libs/lib1/)

configure_file (
                 "${PROJECT_SOURCE_DIR}/config/config.hpp.in"
                 "${PROJECT_SOURCE_DIR}/config/config.hpp"
               )

option (USE_MYMATH ON)

if(USE_MYMATH)
include_directories (${PROJECT_SOURCE_DIR}/libs/lib2/)
endif(USE_MYMATH)

aux_source_directory (./ SRCS)

# 方法1,需要先注释掉方法2
link_libraries (${PROJECT_SOURCE_DIR}/libs/lib1/liblib1.a)
link_libraries (${PROJECT_SOURCE_DIR}/libs/lib2/liblib2.a)

add_executable (demo5 ${SRCS})

# 方法2,需要先注释掉方法1
# target_link_libraries (demo5 
#                        ${PROJECT_SOURCE_DIR}/libs/lib1/liblib1.a
#                        ${PROJECT_SOURCE_DIR}/libs/lib2/liblib2.a
#                       )
编号15文件内容
#include <stdlib.h>

#include <iostream>

#include "../config/config.hpp"
#include "../libs/lib1/lib1.hpp"

#ifdef USE_MYMATH
#include "../libs/lib2/lib2.hpp"
#else
#include <math.h>
#endif

using namespace std;

int main(int argc, char* argv[])
{
    if (argc < 3){
        cout<<"cmd p1 p2"<<endl;
        return 0;
    }

    double p1 = atof(argv[1]);
    double p2 = atoi(argv[2]);

    double res =0;

#ifdef USE_MYMATH
    cout<<"使用自定义函数mypower()"<<endl;
    res = mypower(p1, p2);
    cout<<res<<endl;
#else
    cout<<"使用标准库函数pow()"<<endl;
    res = pow(p1, p2);
    cout<<res<<endl;
#endif

    cout<<"使用自定义函数myadd"<<endl;
    res = myadd(p1, p2);
    cout<<res<<endl;
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值