Cmake 简易使用

Cmake 简易使用

环境

CentOS 7.2
gcc (GCC) 4.8.5
cmake version 2.8.12.2
GNU Make 3.82

单个文件的编译

main.cpp

// main.cpp
#include<iostream>

int main()
{
    std::cout<<"Hello word!"<<std::endl;
    return 0;
}

CMakeLists.txt

# CMakeLists.txt
# 指定项目名称为main
PROJECT(main)

# 限定cmake最小版本
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

# 将当前目录源文件赋给变量DIR_SRCS
# aux_source_directory(<dir> <variable>)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)

# 指示DIR_SRCS下的文件需要编译成一个可执行文件
ADD_EXECUTABLE(main ${DIR_SRCS})

cmake结果

[root@localhost debug]# cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /code/debug

make结果

[root@localhost debug]# make
-- Configuring done
-- Generating done
-- Build files have been written to: /code/debug
Scanning dependencies of target main
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
Linking CXX executable main
[100%] Built target main

多源文件目录处理方法

代码结构

cpp
|
+--- main.cpp
|
+--- src
      |
      +--- Test.h
      |
      +--- Test.cpp

main.cpp

# include "Test.h"
using namespace std;

void Test()
{
    cout << "Test." << endl;
}

Test.h

# include <iostream>

void Test();

Test.cpp

# include "Test.h"
using namespace std;

void Test()
{
    cout << "Test." << endl;
}

cpp/CMakeLists.txt

PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
ADD_SUBDIRECTORY(src)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main ${DIR_SRCS})

# 指明可执行文件 main 需要链接一个名为Test的链接库
TARGET_LINK_LIBRARIES(main Test)

cpp/src/CmakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
AUX_SOURCE_DIRECTORY(. DIR_TEST1_SRCS)

# 将 src 目录中的源文件编译为共享库
ADD_LIBRARY(Test ${DIR_TEST1_SRCS})

cmake结果
在执行 cmake 的过程中,首先解析目录 cpp 中的 CMakeLists.txt ,当程序执行命令 ADD_SUBDIRECTORY( src ) 时进入目录 src 对其中的 CMakeLists.txt 进行解析。

[root@localhost debug]# cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /code/cpp/debug

make结果

[root@localhost debug]# make
Scanning dependencies of target Test
[ 33%] Building CXX object src/CMakeFiles/Test.dir/Test.cpp.o
[ 66%] Building CXX object src/CMakeFiles/Test.dir/Test1.cpp.o
Linking CXX static library libTest.a
[ 66%] Built target Test
Scanning dependencies of target main
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
Linking CXX executable main
[100%] Built target main

使用第三方库

先编译一个待使用的第三方库,代码如下

// Test.h
#include <iostream>

void Test();
// Test.cpp
#include "Test.h"
using namespace std;

void Test()
{
    cout << "Test()." << endl;
}

编译命令

g++ Test.cpp -fPIC --shared -o libtest.so

将头文件和动态链接库放到指定位置

cp libtest.so /usr/lib64/
cp Test.h /usr/include/

项目代码结构,代码见附件 cmake_test.tar.gz

cpp
|
+--- main.cpp
|
+--- CMakeLists.txt
|
+--- cmake
      |
      +--- modules
              |
              +--- Findlibtest.cmake

cpp/CMakeLists.txt

PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CMAKE_SOURCE_DIR .)
SET(CMAKE_MODULE_PATH ${CMAKE_ROOT}/Modules ${CMAKE_SOURCE_DIR}/cmake/modules)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main ${DIR_SRCS})
FIND_PACKAGE(libtest REQUIRED)
MARK_AS_ADVANCED(
LIBDB_CXX_INCLUDE_DIR
LIBDB_CXX_LIBRARIES
)
IF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)
MESSAGE(STATUS "Found libdb libraries")
INCLUDE_DIRECTORIES(${LIBDB_CXX_INCLUDE_DIR})
MESSAGE(${LIBDB_CXX_LIBRARIES} )
TARGET_LINK_LIBRARIES(main ${LIBDB_CXX_LIBRARIES})
ENDIF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)

cpp/cmake/module/Findlibtest.cmake

MESSAGE(STATUS "Using bundled Findlibdb.cmake...")
FIND_PATH(
LIBDB_CXX_INCLUDE_DIR
Test.h
/usr/include/
/usr/local/include/
)

FIND_LIBRARY(
LIBDB_CXX_LIBRARIES NAMES  test
PATHS /usr/lib64/ /usr/local/lib/
)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake是一个用于管理跨平台项目构建的工具。CMake提供了一个命令行界面和一个图形用户界面(GUI)来帮助您配置、生成和构建项目。下面是使用CMake GUI的步骤: 1. 安装CMake:首先确保您已安装了CMake。您可以从CMake官方网站(https://cmake.org)下载并安装适合您操作系统的版本。 2. 打开CMake GUI:启动CMake GUI应用程序。在Windows上,您可以在开始菜单中找到它。在Linux或Mac上,您可以使用终端运行`cmake-gui`命令。 3. 设置源代码目录和构建目录:在CMake GUI的主界面上,选择您的项目的源代码目录和构建目录。源代码目录是包含CMakeLists.txt文件的目录,而构建目录是您想要生成项目的目录。 4. 配置项目:点击"Configure"按钮,选择您想要使用的生成器(比如Visual Studio、Xcode等)并点击"Finish"按钮。CMake将会分析您的项目,并在界面上显示可配置的选项。 5. 配置选项:在CMake GUI的界面上,您可以看到各种可配置的选项,比如编译器选项、库依赖、头文件路径等。根据您的项目需求进行配置。 6. 生成项目:点击"Generate"按钮来生成项目文件。CMake将会根据您的配置选项生成适合您选择的生成器的项目文件(比如Visual Studio的.sln文件)。 7. 构建项目:使用您选择的生成器打开生成的项目文件,并进行构建。具体的构建步骤将取决于您选择的生成器和项目类型。 请注意,这只是一个简单的CMake GUI使用示例。实际上,CMake提供了更多强大的功能和选项,您可以根据需要进一步探索和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值