CLion+CMake编写C++程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CLion+CMake编写C++程序相关的知识,希望对你有一定的参考价值。

参考技术A 当在mac系统下编写c++程序时候,一般需要使用Xcode。如果不想装Xcode如何编译、运行程序呢?

一种方法是编写makefile文件,用makefile文件管理程序脚本之间的相互依赖关系;

一、CMake是一种跨平台编译工具,比make更为高级。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序

二、cmake  指向CMakeLists.txt所在的目录,例如cmake .. 表示CMakeLists.txt在当前目录的上一级目录

cmake会生成很多中间文件,所以建议新建一个文件夹存放,分四个步骤:

1、mkdir bulid  //新建文件夹存放编译的中间文件

2、cd bulid //进入bulide文件夹

3、cmake .. //因为CMakeLists.txt文件在当前目录的外面,所以cmake命令需要使用cmake ..

4、make //make命令根据makefile文件编译源码,在bulid目录下生成一个可执行文件,运行获取结果

CMakeLists.txt主要包含以上的7个步骤:

#1.cmake verson,指定cmake版本

cmake_minimum_required(VERSION 3.13)

#2.project name,指定项目的名称,一般和项目的文件夹名称FirstProject对应

PROJECT(FirstProject)

#3.head file path,头文件目录

INCLUDE_DIRECTORIES()

#4.source directory,源文件目录

AUX_SOURCE_DIRECTORY(src DIR_SRCS)

#5.set environment variable,设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"

SET(TEST_MATH)

#6.add executable file,添加要编译的可执行文件

ADD_EXECUTABLE($PROJECT_NAME $TEST_MATH)

#7.add link library,添加可执行文件所需要的库(命名规则:lib+name+.so),就添加该库的名称

TARGET_LINK_LIBRARIES($PROJECT_NAME m)

如何使用自制软件、cMake 和 cLion 将库添加到 C++ 项目

【中文标题】如何使用自制软件、cMake 和 cLion 将库添加到 C++ 项目【英文标题】:How to add library to C++ Project using homebrew, cMake and, cLion 【发布时间】:2019-12-17 04:58:27 【问题描述】:

我真的是 C++ 新手,我有点困惑。

我正在尝试将此库添加到我的项目中 (https://github.com/mrtazz/restclient-cpp)。 我已经使用 Homebrew 安装了它

brew tap mrtazz/oss
brew install restclient-cpp

然后我尝试通过包含和链接 Homebrew 安装目录将库添加到我的 CMakeLists。

CMakeLists.txt

cmake_minimum_required(VERSION 3.15)

project(POS)

set(CMAKE_CXX_STANDARD 14)

include_directories(/usr/local/include)
link_directories(/usr/local/lib)

add_library(
        restclient-cpp STATIC
        connection.h
        helpers.h
        restclient.h
        version.h
)

add_executable(POS main.cpp program.cpp program.h programs/find.cpp programs/find.h tools/db.cpp tools/db.h)

target_link_libraries(POS PUBLIC restclient-cpp)

然后我收到此错误...

CMake Error at CMakeLists.txt:16 (add_library):
  Cannot find source file:

    connection.h

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm
  .hpp .hxx .in .txx


CMake Error at CMakeLists.txt:16 (add_library):
  No SOURCES given to target: restclient-cpp

我知道目录有问题,但我无法弄清楚,我将非常感谢尽可能多的信息。我只是想从中获得一些乐趣,但我无法弄清楚为什么我不能将这个简单的库添加到我的构建中。

谢谢。

【问题讨论】:

【参考方案1】:

您正在尝试将头文件添加到add_library 命令。这些文件需要位于您通过include_directory 包含的目录中。您也不应该将头文件放入add_executable 命令中。

要链接现有库,您可以调用target_link_libraries

示例:

include_directories($MY_INCLUDE_DIRS)
add_executable(main source.cpp)
target_link_libraries(main extlib)

最好找到simple CMake setup 并尝试将其用作模板。

【讨论】:

我删除了 add_library 行,现在target_link_libraries 可以工作了。这是因为我要添加的库已经编译了吗?我会做更多的研究为什么这现在有效,但谢谢。 是的,add_library 用于生成库 - 就像 add_executable

以上是关于CLion+CMake编写C++程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 cmake 编译带有 v8 库的 C++ 程序

CMake C++ 包含静态系统库到项目 - 如何

如何使用自制软件、cMake 和 cLion 将库添加到 C++ 项目

通过CLion的C ++程序找不到环境变量

C++《披着clion的外衣实则在讲cmake》的知识点目录

一种发布 C++ 项目可执行文件的简洁方法