码迷,mamicode.com
首页 > 系统相关 > 详细

Ubuntu下使用cmake生成可执行文件

时间:2017-06-30 18:50:05      阅读:419      评论:0      收藏:0      [点我收藏+]

标签:efi   gil   dag   get   aaa   aam   d3d   gpg   fms   

1.单个CPP文件的cmake

首先编写一个简单的程序(main.cpp):

#include <iostream>
using namespace std;
int main()
{
  cout<<"hello cmake"<<endl;
  return 0;
}

编写 CMakeLists.txt,并与main.cpp 放在同一个目录。

project(hello)
cmake_minimum_required(VERSION 2.8)
add_executable(hello main.cpp)

进入CMakeLists.txt所在目录,在CMakeLists.txt 所在的目录下创建一个 build目录,进入build目录输入:

cmake ..
make

执行完毕后,在 build 目录下会有很多编译出来的文件,但是只需要其中的可执行文件,如果要把可执行文件放到与 build 目录同级的 bin 文件夹下,那么在CMakeLists.txt 的最后加上下面这两句话:

set( CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/bin/")
install(TARGETS hello RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})

将 make 指令改为make install,执行完毕后,就可以在 bin 文件夹中看到可执行文件 hello

2.引入data文件夹

如果可执行文件需要调用一些文件,假设文件在 data 文件夹中,且 data 与CMakeLists.txt 在同级目录,则可以通过如下语句将 data 文件夹也放入 bin 文件夹

install(DIRECTORY data DESTINATION ${CMAKE_INSTALL_PREFIX})

3.多个CPP和H文件的cmake

如果 main.cpp 中用到了另一个文件的内容,文件目录如下图,应该怎么办呢?

技术分享
其中 hello.h 为类的声明,hello.cpp 为类函数的定义。
这时可以把 CMakeLists.txt 改为下面这样:

project(hello)
cmake_minimum_required(VERSION 2.8)
set(SRCS main.cpp hello.cpp)
add_executable(hello ${SRCS})

如果 hello.cpp 与 main.cpp 不在同一个文件夹呢?如下所示

技术分享
这时候每个文件夹下都要有一个 CMakeLists.txt。
其中 main.cpp 同级目录下的 CMakeLists.txt 如下:

project(hello)
cmake_minimum_required(VERSION 2.8)
add_subdirectory(Hello)
set(SRCS main.cpp)
add_executable(hello ${SRCS})
target_link_libraries(hello hell)

Hello 目录下的 CMakeLists.txt 如下:

add_library(hell STATIC hello.cpp)

说明:第一个 CMakeLists.txt 中的 add_subdirectory(Hello)表示在编译时要包含 Hello这个目录,而 target_link_libraries(hello hell)表示在生成 hello 时要调用静态链接库hell,而 hell 是在 Hello 目录下的 CMakeLists.txt 中的add_library(hell STATIC hello.cpp)中产生的。

同理,如果 hello.cpp 中使用了其它链接库里的东西,则在其 CMakeLists.txt 也要加入 target_link_libraries(hell xxx)。
注意:在写 target_link_libraries 语句时,括号里面的第一名称必须是当前所需要生成文件的名称,比如上面的 hello 和 hell。但是,这样写在引用头文件时要写成 #include “Hello/hello.h”, 显得过长,这时,可以在 CMakeLists.txt 中加入下面这句话:

include_directories(./Hello)

这样引用头文件就可以写成 #include “hello.h”
更多使用方法自行百度。

Ubuntu下使用cmake生成可执行文件

标签:efi   gil   dag   get   aaa   aam   d3d   gpg   fms   

原文地址:http://www.cnblogs.com/DLarTisan/p/7100166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!