CMakeLists 小学-1

The most basic project is an executable built from source code files. For simple projects a two line CMakeLists.txt file is all that is required. This will be the starting point for our tutorial. The CMakeLists.txt file looks like:[1]

cmake_minimum_required (VERSION 2.6)
#工程名
project (Tutorial)
#生成可执行文件(可执行文件名为tutor,由tutorial.cpp编译生成的)
add_executable(tutor tutorial.cpp)

第一行 project 不是强制性的[2],但最好始终都加上。这一行会引入两个变量

  • HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR

同时,cmake自动定义了两个等价的变量

  • PROJECT_BINARY_DIR 和 PROJECT_SOURCE_DIR

  • CMAKE_BINARY_DIR  和CMAKE_SOURCE_DIR
一般的C++工程都是由多个文件组成的,所以,通常 add_executable生成可执行文件需要编译多个文件。

因此我们一般这么写:

#set用于设置变量,变量都是大写的(虽然大小写都对),这是习惯
set(SRCS tu1.cpp tu2.cpp)
add_executable(tutor ${SRCS})

下面是rcssserver3d 项目的CMakeLists文件,可以看到不止一个CMakeLists.txt。

这么多个CMakeLists,在不同的目录(directory)下,如何调用?

答:通过项目目录(PROJECT_SOURCE_DIR)下的主CMakeLists.txt 用 add_subdirectories(subDirecotryName)来调用各个子CMakeLists的。


message用于在cmake时输出提示信息。

示例一:

目录树如下,hello.cpp就是一个hello world程序。

+
| 
+--- hello.cpp
+--- CMakeLists.txt
|
/--+ build/
   |
   +--- hi

注意:build目录,这是我们为了采用cmake的out-of-source方式构建(即生成中间产物与源代码分离)

cmake_minimum_required (VERSION 2.6)

project (Hello)
SET (SRCS hello.cpp)
add_executable (hi ${SRCS})
#两个message输出结果相同,都是目录树的根
message("用message输出的PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR})
message("用message输出的Hello_SOURCE_DIR: " ${Hello_SOURCE_DIR})
message("===PROJECT_BINARY_DIR=====" ${PROJECT_BINARY_DIR})
message("===CMAKE_BINARY_DIR=====" ${CMAKE_BINARY_DIR}) 


示例二:

目录树如下,

+
|
+--- CMakeLists.txt
+--+ src/
|  |
|  +--- main.cpp
|  /--- CMakeLists.txt
|
+--+ libhello/
|  |
|  +--- hello.h
|  +--- hello.cpp
|  /--- CMakeLists.txt
|
/--+ build/
//hello.cpp
#include <iostream>
#include "hello.h"

using namespace std;

void hello(string obj){
	cout<<"=====555555========"<<endl;
	cout<<"hello "<<obj<<endl;
	cout<<"=====555555========"<<endl;
}
//hello.h
#ifndef HELLO_H
#define HELLO_H
#include <string>

void hello(std::string obj);

#endif
#libhello下的CMakeLists
set(LIBS hello.cpp)
add_library(hello SHARED ${LIBS})

set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

再写src目录下的代码:

//main.cpp

//#include "../libhello/hello.h"
#include "hello.h"

//以上两种包含hello.h的方法都可以,很神奇
int main(){
	hello("world ..");
	return 0;
}
#include_directories,用来指明头文件所在的路径
include_directories(${PROJECT_SOURCE_DIR}/libhello)

set(SRCS main.cpp)
add_executable(elo ${SRCS})
target_link_libraries(elo hello)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

最后,写项目目录下的CMakeLists.txt

cmake_minimum_required(VERSION 2.6)

project(Hello)
add_subdirectory(libhello)
add_subdirectory(src)

大功告成!

问题1target_link_libraries(elo hello)是什么?

hello是一个库(静态.a 或 动态.so 都行),这条语句的作用就是把库链接到可执行中。

问题2:hello这个库从哪里来的?

add_library(hello SHARED ${LIBS})会产生一个动态库libhello.so

add_library(hello  ${LIBS})会产生一个动态库libhello.a

默认的,

库文件libhello.so(a)会生成在build/libhello目录下。

可执行文件elo会生成在build/src目录下。

问题3set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)很相似,她们是做什么的?

她们没有什么建设性的作用,没有也行。

有她们的话,

库文件libhello.so(a)会生成在build/lib目录下。

可执行文件elo会生成在build/bin目录下。


【1】:CMake Tutorial

【2】:cmake学习笔记(一)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值