当前位置:网站首页>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: 如有需要,请添加测试并安装目标。
使用:
引入头文件:
运行结果:
边栏推荐
- Takeda Fiscal 2022 First Quarter Results Strong; On Track to Achieve Full-Year Management Guidance
- 2022杭电多校六 1006-Maex (树形DP)
- GAN generates anime avatar Pytorch
- Flink学习11:flink程序并行度
- DNSlog外带数据注入
- Source code analysis of Nacos configuration service (full)
- MySQL: JDBC programming
- 自媒体人一般会从哪里找素材呢?
- 铠侠携手Aerospike提升数据库应用性能
- 【Go】IM系统Centrifugo
猜你喜欢
女生做软件测试会不会成为一个趋势?
typescript68-索引查询类型(查询多个)
腾讯实习总结
After working for 3 years, I recalled the comparison between the past and the present when I first started, and joked about my testing career
今天虚竹哥又发现了一款好用的国产化API工具
Source code analysis of Nacos configuration service (full)
typescript66-分析partial的实现
Shared memory + inotify mechanism to achieve multi-process low-latency data sharing
FPGA解析B码----连载4
工作3年,回想刚入门和现在的今昔对比,笑谈一下自己的测试生涯
随机推荐
栈与队列的基本介绍和创建、销毁、出入、计算元素数量、查看元素等功能的c语言实现,以及栈的压入、弹出序列判断,栈结构的链式表示与实现
protobuf is compiled against the associated .proto file
FPGA解析B码----连载4
Mysql master-slave delay reasons and solutions
TCP sticky packet unpacking problem + solution
技术分析模式(十一)如何交易头肩形态
怎么样避免线上内存泄漏
C# FileSystemWatcher
日本卫生设备行业协会:日本温水喷淋马桶座出货量达1亿套
Technical Analysis Mode (8) Double Top and Bottom
TCP的粘包拆包问题+解决方案
技术分析模式(七)发挥差距
在STM32中使用printf函数
2022 Fusion Welding and Thermal Cutting Operation Certificate Exam Questions and Mock Exams
LaTeX Notes
Redis
Why does Mysql fail to create a database
GAN generates anime avatar Pytorch
AI + video technology helps to ensure campus security, how to build a campus intelligent security platform?
The NDK compiler so libraries