典型cmake工程目录结构(含静态库)
.
├── build
├── CMakeLists.txt
├── config
│ ├── config.hpp
│ └── config.hpp.in
├── libs
│ ├── lib1
│ │ ├── lib1.hpp
│ │ └── liblib1.a
│ └── lib2
│ ├── lib2.hpp
│ └── liblib2.a
└── src
├── CMakeLists.txt
└── demo5.cpp
编译运行命令
cd build
ccmake ..
cmake ..
make
./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;
}