1.工程目录结构
main.cc的内容
#include <stdio.h>
#include <stdlib.h>
#include "math/MathFunctions.h"
int main(int argc, char *argv[])
{
if (argc < 3){
printf("Usage: %s base exponent \n", argv[0]);
return 1;
}
double base = atof(argv[1]);
int exponent = atoi(argv[2]);
double result = power(base, exponent);
printf("%g ^ %d is %g\n", base, exponent, result);
return 0;
}
需要分别在项目根目录 Demo3 和 math 目录里各编写一个 CMakeLists.txt 文件。可以先将 math 目录里的文件编译成静态库再由 main 函数调用。
2.CMakeLists.txt的编写
根目录中的 CMakeLists.txt :
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (MultiDirMultiFiles)
# 查找目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
##或者使用file查找目录下的文件
##查找当前文件夹中的所有源代码文件,也可以通过Set命令将所有文件设置为一个变量
#FILE(GLOB SRC_FILES ${CMAKE_CURRENT_LIST_DIR}/*.cc)
##查找设置当前文件夹中所有的头文件
#FILE(GLOB HEAD_FILES ${CMAKE_CURRENT_LIST_DIR}/*.h)
# 添加 math 子目录
add_subdirectory(math)
# 指定生成目标
add_executable(MultiDirMultiFiles ${DIR_SRCS})
#add_executable(MultiDirMultiFiles ${SRC_FILES} ${HEAD_FILES})
# 添加链接库
target_link_libraries(MultiDirMultiFiles MathFunctions)
子目录中的 CMakeLists.txt:
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)
# 指定生成 MathFunctions 链接库
add_library (MathFunctions ${DIR_LIB_SRCS})