ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CMake基础(二) - 使用子目录管理项目文件和文件夹

2022-07-20 14:33:46  阅读:272  来源: 互联网

标签:CMake 子目录 cpp 文件夹 math print my dir result


多个子目录的构建

复制一份文件夹cp -r module2 module2,删除文件夹 my_build_dir,新建文件夹build

/module3$ ls
addition.cpp  build           division.cpp  main.cpp  my_math_dir   print_result.cpp
addition.h    CMakeLists.txt  division.h    makefile  my_print_dir  print_result.h

移动 addition.cppdivision.cpp到新建文件夹my_math_dir

移动 print_result.cpp到新建文件夹my_print_dir

/module3$ ls
addition.h  CMakeLists.txt  main.cpp  my_math_dir   print_result.h
build       division.h      makefile  my_print_dir

编辑CMakeLists.txt,将新建的子目录添加到构建数中

cmake_minimum_required(VERSION 3.0.0)

project(Calculator_Project VERSION 1.0.0)

#我们告诉cmake进入这些子目录,然后找到另一个CMakeLists.txt
add_subdirectory(my_math_dir)
add_subdirectory(my_print_dir)

add_executable(calculator
main.cpp)

target_link_libraries(calculator my_math my_print)

编辑 /module3/my_print_dir/CMakeLists.txt

add_library(my_print
print_result.cpp)

编辑 /module3/my_math_dir/CMakeLists.txt

add_library(my_math
addition.cpp
division.cpp)

此时的目录树看起来就是这样的:

进入/build,执行cmake .. , make

/module3/build$ make
Scanning dependencies of target my_print
[ 14%] Building CXX object my_print_dir/CMakeFiles/my_print.dir/print_result.cpp.o
[ 28%] Linking CXX static library libmy_print.a
[ 28%] Built target my_print
Scanning dependencies of target my_math
[ 42%] Building CXX object my_math_dir/CMakeFiles/my_math.dir/addition.cpp.o
[ 57%] Building CXX object my_math_dir/CMakeFiles/my_math.dir/division.cpp.o
[ 71%] Linking CXX static library libmy_math.a
[ 71%] Built target my_math
Scanning dependencies of target calculator
[ 85%] Building CXX object CMakeFiles/calculator.dir/main.cpp.o
[100%] Linking CXX executable calculator
[100%] Built target calculator

生成可执行文件

/module3/build$ ls
calculator      CMakeFiles           Makefile     my_print_dir
CMakeCache.txt  cmake_install.cmake  my_math_dir
/module3/build$ ./calculator 
Enter first number      65
Enter second number     21
Addition result:        86
Division result:        3.09524

头文件管理

将头文件依次移动到子目录中的include文件夹,源代码移动到src中

依次为每个子目录源代码引入头文件:

/module3/my_math_dir/src/addition.cpp

#include "addition.h"

float addition(float num1, float num2)
{return num1 + num2;}

/module3/my_math_dir/src/division.cpp

#include "division.h"

float division(float num1, float num2)
{return num1 / num2;}

/module3/my_math_dir/src/print_result.cpp

#include <iostream>
#include "print_result.h"

using namespace std;
void print_result(string result_type, float result_value)
{cout << result_type << " result:\t" << result_value << "\n";}

修改子目录CMakeLists.txt ,指定头文件目录

target_include_directories(TargetName | Scope | Arguments)

/module3/my_math_dir/CMakeLists.txt

add_library(my_math
src/addition.cpp
src/division.cpp)
#指定头文件目录
target_include_directories(my_math PUBLIC include)

/module3/my_print_dir/CMakeLists.txt

add_library(my_print
src/print_result.cpp)

target_include_directories(my_print PUBLIC include)

再次执行 cmake .. 与 make 可以得到:

/module3/build$ ls
calculator      cmake_install.cmake  my_print_dir
CMakeCache.txt  Makefile
CMakeFiles      my_math_dir

目标属性与范围

  • target_include_directories(my_math PUBLIC/INTERFACE/PRIVATE include)

简单来说就是:

  • 只是自己模块用,PRIVATE
  • 自己不用,其他目标文件用,INTERFACE
  • 都要用,PUBLIC

有多个不同权限的引入也可以这样使用:

target_include_directories(Target Private xxx PUBLIC yyy)

标签:CMake,子目录,cpp,文件夹,math,print,my,dir,result
来源: https://www.cnblogs.com/anqwjoe/p/16497816.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有