当前位置:网站首页>cmake 学习使用笔记(三)
cmake 学习使用笔记(三)
2022-08-05 06:42:00 【ly_zszcyx】
目录
使用工具
开发工具:VS2019、clion、cmake
平台: win
add_subdirectory---关联子构建系统
多编译系统,即多个CMakeList.txt,非顶级的构建都属于子构建系统。
add_subdirectory(source_dir [binary_dir]
[EXCLUDE_FROM_ALL])参数详解:
- source_dir:必选参数。子编译系统目录,该参数指定一个子目录,子目录下应该包含
CMakeLists.txt文件和代码文件。 - binary_dir:可选参数;该参数指定一个目录,用于存放输出文件。可以是相对路径也可以是绝对路径,如果是相对路径,则是相对当前输出目录的一个相对路径。binary_dir是用于指定source_dir经过编译后的输出文件的目录。如果未指定,则默认使用source_dir路径。
- EXCLUDE_FROM_ALL :可选参数。将指定目录排除编译;当指定了该参数,则子目录下的目标不会被父目录下的目标文件包含进去,父目录的
CMakeLists.txt不会构建子目录的目标文件,必须在子目录下显式去构建。注意:当父目录的目标依赖于子目录的目标,则子目录的目标仍然会被构建出来以满足依赖关系(例如使用了target_link_libraries)例外。
例如:我用 vs 2019 创建的项目

新建项目时选择将解决方案和项目放在同一目录时。


示例1:子系统生成静态库

addSubdirectoryTest.h
#ifndef ADD_SUBDIRECOTRY_TEST_H_
#define ADD_SUBDIRECOTRY_TEST_H_
void test();
#endif
addSubdirectoryTest.cpp
#include <iostream>
#include "addSubdirectoryTest.h"
void test() {
std::cout << "子项目测试" << std::endl;
}CMakeLists.txt 文件内容:
cmake_minimum_required (VERSION 3.8)
project(addSubdircotryTest)
aux_source_directory(. DIR_MY_LIB_TEST)
add_library(addSubdircotryTest ${DIR_MY_LIB_TEST})
#add_library(addSubdircotryTest addSubdirectoryTest.cpp)
主项目CmakeList.txt 文件:

全部代码:
# CMakeList.txt: cPulsPlusTestProject 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
#注意:cmake的语法支持大小、小写和大小写混合上边的代码中我们使用的cmake语法是小写的.
#project(cPlusPlusTestProject1)
cmake_minimum_required (VERSION 3.8)
# 设置系统自带变量
set(cmake_cxx_standard 11)
#SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")
if(CAMKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11 -pthread")
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")
endif()
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fexec-charset=GBK")
#include_directories(./Header)
#include_directories(./Header/ThreadTest ./Header/OpteratorOverloadTest)
#设置头文件搜索路径
set(myHeadPath "${CMAKE_CURRENT_SOURCE_DIR}/Header")
include_directories(${myHeadPath})
set (cPlusPlusTest_version_major 1.9)
set (cPlusPlusTest_version_minor 1.5)
configure_file(
"${PROJECT_SOURCE_DIR}/cPlusPlusTestConfig.h.in"
"${PROJECT_BINARY_DIR}/cPlusPlusTestConfig.h"
)
add_definitions(-DMyDebug)
include_directories(${PROJECT_BINARY_DIR})
include_directories(${PROJECT_SOURCE_DIR}/3dPart/3dInclude)
link_directories(${PROJECT_SOURCE_DIR}/3dPart/lib)
link_directories(${PROJECT_SOURCE_DIR}/output)
#link_libraries()
#link_directories(../3dPart/lib)
#link_libraries(${PROJECT_SOURCE_DIR}/3dPart/lib/MyMathFunctions.lib)
# 将源代码添加到此项目的可执行文件。
# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
add_subdirectory(subProjectTest ${PROJECT_SOURCE_DIR}/output/lib)
add_executable (cPlusPlusTestProject "Source/cPlusPlusTestProject.cpp" "Header/cPlusPlusTestProject.h" "Header/ThreadTest/multipleThreadTest.h" "Source/ThreadTest/multipleThreadTest.cpp" "Header/ThreadTest/calculateTest.h" "Source/ThreadTest/calculateTest.cpp" "Header/ThreadTest/calculateTest2.h" "Source/ThreadTest/calculateTest2.cpp" "Header/OpteratorOverloadTest/OverloadOperatorTest.h" Source/PerformanceTest/RelevantSizeFuncTest.cpp Header/PerformanceTest/RelevantSizeFuncTest.h)
#target_link_directories(cPlusPlusTestProject PUBLIC ${PROJECT_SOURCE_DIR}/3dPart/lib)
#target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/libMyMathFunctions.a)
#target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/LibTest.lib)
target_link_libraries(cPlusPlusTestProject MyMathFunctions)
target_link_libraries(cPlusPlusTestProject addSubdircotryTest)
#target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/libMyMathFunctions.dll.a)
#target_link_libraries(cPlusPlusTestProject ${PROJECT_SOURCE_DIR}/3dPart/lib/libMyMathFunctions.dll)
# TODO: 如有需要,请添加测试并安装目标。
使用:
引入头文件:

运行结果:
边栏推荐
- [Shanghai] Hiring .Net Senior Software Engineer & BI Data Warehouse Engineer (Urgent)
- 香港国际珠宝展及香港国际钻石、宝石及珍珠展揭幕
- Flink学习12:DataStreaming API
- PCI Pharma Services Announces Multi-Million Dollar Expansion of UK Manufacturing Facility to Meet Growing Demand for Global High Potency Drug Manufacturing Services to Support Oncology Treatment
- (4) Rotating object detection data roLabelImg to DOTA format
- (2022杭电多校六)1010-Planar graph(最小生成树)
- 691. 立方体IV
- How to avoid online memory leaks
- Rapid Medical's Ultra-Small and Only Adjustable Thromb Retriever Receives FDA Clearance
- Falsely bamboo brother today and found a localization of API to use tools
猜你喜欢
随机推荐
访问被拒绝:“microsoft.web.ui.webcontrols”的解决办法
AI+视频技术助力保障校园安全,校园智能安防平台该如何建设?
[Shanghai] Hiring .Net Senior Software Engineer & BI Data Warehouse Engineer (Urgent)
【instancetype类型 Objective-C】
(2022杭电多校六)1012-Loop(单调栈+思维)
typescript67-索引查询类型
栈与队列的基本介绍和创建、销毁、出入、计算元素数量、查看元素等功能的c语言实现,以及栈的压入、弹出序列判断,栈结构的链式表示与实现
真实字节跳动测试开发面试题,拿下年薪50万offer。
技术分析模式(九)三重顶部和底部
binary search tree problem
Technical Analysis Patterns (11) How to Trade Head and Shoulders Patterns
How to avoid online memory leaks
Technical Analysis Mode (8) Double Top and Bottom
Cannot compare or sort text, ntext, and image data types
Flink Learning 11: Flink Program Parallelism
Flink Learning 12: DataStreaming API
《基于R语言的自动数据收集》--第3章 XML和JSON
Flink学习12:DataStreaming API
2022 crane driver (limited bridge crane) exam question bank and simulation test
Source code analysis of Nacos configuration service (full)









