1. 首页
  2. ag国际厅亚洲线路|官网

cmake怎么使用message打印变量的值

我觉得大致思路是 1. 先用左右边界就像你写的那样子去匹配服务器的返回值 2. 然后把这个返回值写到一个变量 (貌似这一步你代码里没体现) 3. 最后把这个变量打印到日志 (这里似

我觉得大致思路是 1. 先用左右边界就像你写的那样子去匹配服务器的返回值 2. 然后把这个返回值写到一个变量 (貌似这一步你代码里没体现) 3. 最后把这个变量打印到日志 (这里似乎不需要使用参数化 参数化不应该是这么用的 )

如何编写平台检查

如果你想编写软件编制,在不同操作系统上运行,你必须对不同平台的特殊性质的照顾。在不同的操作系统有细微的差别,例如在FreeBSD你不应该使用malloc.h,而这是完全可以在Linux上使用它。处理这些差异通常是通过提供一个头文件,它包含了定义,根据平台性能报表,通常命名为config.h中一堆:

1#定义HAVE_MALLOC_H

/ *#民主 基金HAVE_SYS_MNTTAB_H 1 * /

/ *#民主基金HAVE_SYS_MNTENT_H 1 * /

1#定义HAVE_SYS_MOUNT_H

然后,这个头文件包含在源文件和妥善处理:

foo.c的:

#include “config.h”

#ifdef HAVE_MALLOC_H

#include

#else

#include

#endif

无效do_something()

*缓冲区=无效的malloc(1024);

...

对config.h中的内容取决于所在的来源是编译平台,因此需要有一种方法来生成这个头文件在实际编制过程开始。如果您使用的自动工具为基础的软件,你可能知道。/ configure这一步,已经开始做之前必须执行。在。/ configure脚本做一些系统的反思,并从收集信息的config.h头文件生成。 CMake是能够做到的一样,我会告诉你如何去做。

此外以内建的命令,通过提供的CMake CMake的脚本文件,称为模块实现更多的命令。这些文件位于CMake的模块目录,在UNIX系统默认是这个/ USR的/地方/股/的CMake /单元。

若要使用这些模块的命令,他们必须在的CMakeLists.txt中。 CMake的来了,他们都遵循一个例子CHECK_INCLUDE_FILES同一风格,以检查系统的几个模块:

包括(CheckIncludeFiles)

#用法:CHECK_INCLUDE_FILES( )

CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H)

CHECK_INCLUDE_FILES(“系统/ param.h;系统/ mount.h”HAVE_SYS_MOUNT_H)

CONFIGURE_FILE($(CMAKE_CURRENT_SOURCE_DIR)/ $(CMAKE_CURRENT_BINARY_DIR config.h.in)/ config.h中)

CMake的模块CheckIncludeFiles提供了命令CHECK_INCLUDE_FILES()。的第一个参数此命令是头部,你要检查。第二个参数是变量将包含结果。如果给定的头被发现,它被设置为1,否则是空的。如果另一头是需要使用的头,你所寻找的,你要列出头文件用分号隔开,你可以在上面看到。要查看CHECK_INCLUDE_FILES()到底,有一个在执行看看吧:/ usr /本地/共享/ CMake的/模块/ CheckIncludeFiles.cmake。在那里你会看到它试图编译一个简单的源文件,其中包括指定的头文件。该ag国际厅官网|官方的结果存储在文件CMakeCache.txt,所以如果你想检查后ag国际厅官网|官方是否成功或不看在CMakeCache.txt文件:

/ /有包括HAVE_MALLOC_H

HAVE_MALLOC_H:内部= 1

只要长期的结果缓存,ag国际厅官网|官方将不会被再次执行。如果你想让它再一次被执行,或者删除该文件CMakeCache.txt,那么所有的ag国际厅官网|官方将再次执行,或者仅仅删除的变量,你希望有再次ag国际厅官网|官方的项目。这样可以节省一些时间。如果ag国际厅官网|官方失败,你要找出原因,打开CMakeFiles / CMakeError.log和标题名称(或功能等)搜索你ag国际厅官网|官方。在那里你会看到代码无法编译或链接时,编译命令和错误信息。连同在CheckIncludeFiles.cmakeag国际厅官网|官方实现你应该能够找出什么地方出了错。

好了,现在我们已经ag国际厅官网|官方是否如malloc.h存在,并在cmake的变量HAVE_MALLOC_H因此,我们仍然要创建一个头的config.h。要做到这一点,我们使用cmake的命令CONFIGURE_FILE(),正如你上面看到的。这将复制源文件到目标文件并编辑它,而这样做,详见手册页。因此,我们写了一个源文件名为config.h.in,但你可以给它的任何您想要的名称(它也通常命名为config.h.in autotools的):

1#cmakedefine HAVE_MALLOC_H

#cmakedefine HAVE_SYS_MOUNT_H

现在,当CMake的运行,它将取代#cmakedefine。如果HAVE_MALLOC_H和HAVE_SYS_MOUNT_H是真的,它会产生的config.h:

1#定义HAVE_MALLOC_H

#定义HAVE_SYS_MOUNT_H

如果两个都是假的,这将产生:

/ *#民主基金HAVE_MALLOC_H 1 * /

/ *#定义HAVE_SYS_MOUNT_H * /

通过包括这头到您的源文件,您可以检查这些属性使用#ifdef。这种检查可以插入在任何项目中的CMakeLists.txt不仅在顶层的CMakeLists.txt。如果您有多个配置的头,你不应该把它们命名为所有的config.h,这可能导致与包含路径的问题。最好给他们喜欢的config.h名称,配置为在配置子目录富头foo.h /和配置,在酒吧/子目录,等等bar.h

用cmake的未来进行系统检查其他命令按照这种风格,所以我们可以处理它们更短了。

模块

包括(CheckIncludeFiles)

用法

CHECK_INCLUDE_FILES(标头变量)

范例

CHECK_INCLUDE_FILES(strings.h HAVE_STRINGS_H)

正如刚才冗长的讨论,这可以用来检查一个头的存在。

模块

包括(CheckFunctionExists)

用法

CHECK_FUNCTION_EXISTS(函数变量)

范例

CHECK_FUNCTION_EXISTS(madvise HAVE_MADVISE)

检查是否存在给定的函数。这是通过将一个小程序,它可能不会导致未定义的引用。

模块

包括(CheckSymbolExists)

用法

CHECK_SYMBOL_EXISTS(符号标题变量)

范例

CHECK_SYMBOL_EXISTS((LC_MESSAGES“locale.h中”HAVE_LC_MESSAGES)

检查是否存在给定的符号,如果指定的标头也包括在内。

模块

包括(CheckLibraryExists)

用法

CHECK_LIBRARY_EXISTS(库函数的位置变量)

范例

CHECK_LIBRARY_EXISTS(volmgt volmgt_running“”HAVE_VOLMGT)

检查是否存在给定的库和包含给定的函数。这是通过将一个小程序,它使用功能和图书馆的链接。在一个额外的链接位置参数目录(- Ldir)如果需要的话可以考虑。

模块

包括(CheckTypeSize)

用法

套装(CMAKE_EXTRA_INCLUDE_FILES头)

CHECK_TYPE_SIZE(类型变量)

套装(CMAKE_EXTRA_INCLUDE_FILES)

范例

设定(CMAKE_EXTRA_INCLUDE_FILES sys / socket.h中)

CHECK_TYPE_SIZE(“结构ucred”STRUCT_UCRED)

套装(CMAKE_EXTRA_INCLUDE_FILES)

检查是否存在指定的类型和返回类型的大小。在变量的类型的大小将被退回,另外一个变量HAVE_STRUCT_UCRED将被设置为true,如果存在的类型。请不要认为你必须设置CMAKE_EXTRA_INCLUDE_FILES为这种类型所需的头文件,你应该调用CHECK_TYPE_SIZE后重置它。如果你是不是真的有兴趣在该类型的大小,但只有它是否存在与否,你也可以使用STRUCT_UCRED直接,如果类型不存在,这将是空的,所以也计算为假(如将HAVE_STRUCT_UCRED )。

模块

包括(CheckPrototypeExists)

用法

CHECK_PROTOTYPE_EXISTS(函数头变量)

范例

CHECK_PROTOTYPE_EXISTS(mkstemps“stdlib.h中; unistd.h”HAVE_MKSTEMPS_PROTO)

头检查是否为给定函数的声明,即不检查是否使用功能将导致未定义的引用。

模块

包括(CheckCXXSourceCompiles)

包括(CheckCSourceCompiles)

用法

CHECK_CXX_SOURCE_COMPILES(源变量)

CHECK_C_SOURCE_COMPILES(源变量)

检查是否在给定的源代码将编译和链接。您可以设置CMAKE_REQUIRED_LIBRARIES,CMAKE_REQUIRED_FLAGS和CMAKE_REQUIRED_INCLUDES因此,如果额外的库或编译器标志是必需的。

转载

如何才能使CMake生成的可执行程序便于调试

出现的原因是导入的此makefile工程不是debug模式的,所以不包含调试信息,自然不能打断点调试了。因此,要解决这个问题就要考虑如何修改CMakeLists.txt使其生成的makefile文件进而生成Debug模式下的带调试信息的可执行程序;

我们先写一个简单的ag国际厅官网|官方例子来ag国际厅官网|官方一下,如何加调试信息:

假设文件结构如下:

./test6

|

+ ------ CmakeLists.txt

+ ------ main.cpp

+ ------ src_a

|

+ ------ CmakeLists.txt

+ ------ Testa.h

+ ------ Testa.cpp

+ ------ src_so

|

+ ------ CmakeLists.txt

+ ------ Testso.h

+ ------ Testso.cpp

第一步:test6目录下CmakeLists.txt

cmake_minimum_required(VERSION 3.3)

project(main )

add_subdirectory(src_a ) // 给当前工程目录添加子目录 src_a

add_subdirectory(src_so ) // 给当前工程目录添加子目录 src_so

set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息

set(EXECUTABLE_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置可执行文件的生成路径

include_directories($ {PROJECT_SOURCE_DIR}/src_a ${PROJECT_SOURCE_DIR}/src_so) //包含库头文件

aux_source_directory(. DIR_SRCS ) // 将当前目录中的源文件名称赋值给变量 DIR_SRCS

add_executable(main $ {DIR_SRCS}) //表示 DIR_SRCS中的源文件需要编译成名为 main的可执行文件

target_link_libraries (main Testa Testso) //将库文件链接到生成的目标可执行文件

第二步:子目录目录下CmakeLists.txt

1,src_a中静态库的编译生成

cmake_minimum_required(VERSION 3.3) //该命令限定了 CMake 的版本

set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息

set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置Lib 静态库生成路径

aux_source_directory(. LIBA_SRC) //将当前目录中的源文件名称赋值给变量 LIBA_SRC

add_library(Testad STATIC $ {LIBA_SRC}) //将变量 LIBA_SRC中的源文件编译为静态库,库文件名称为 Testa

2,src_so中动态库的编译生成

cmake_minimum_required(VERSION 3.3) //该命令限定了 CMake 的版本

set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //添加调试信息

set(LIBRARY_OUTPUT_PATH $ {PROJECT_SOURCE_DIR}/bin) //设置Lib 动态库库生成路径

aux_source_directory(. LIBSO_SRC) //将当前目录中的源文件名称赋值给变量 LIBA_SRC

add_library(Testsod SHARED $ {LIBSO_SRC}) //将变量 LIBA_SRC中的源文件编译为动态库,库文件名称为 Testso

此处执行cmake时有两种方式:

1,在cmake的gui界面中设定生成Debug模式,

2,在执行cmake时使用如下命令:cmake -DCMAKE_BUILD_TYPE=Debug/Release path

关于ccmake的使用,这里简单的做个说明:

1.首先在终端启动cmake的gui界面:"ccmake ." 效果如图:

2.然后在gui中输入"c",效果如图:

3.然后在gui中输入"e",效果如图:

4.此时在gui界面点击"enter"回车键进行编辑:编辑完再次点击回车退出编辑。

5.点击"c",之后再次点击"g"。此时makefile文件已经生成好了。make之后生成的可执行文件是带有调试信息的,就可用gdb进行调试了(导入Eclipse也可以进行打断点调试)。

unbuntu中安装cmake后怎么修改环境变量

把你cmake的安装路径下的bin目录添加到PATH里面去。修改/etc/profile或者~/.bashrc

linux下怎么安装cmake

1.安装gcc等必备程序包,在cmake安装包的网站中选择binary distribution下的linux x86_64下的cmake-3.6.0-Linux-x86 64.tar.gz压缩包,点击,下载。默认下载到了home/DOWNLOAD

2.把下载好的包复制到指定路径,比如/home/bnu,在当前文件夹中打开终端,输入

3.tar zxvf cmake-3.6.0-Linux-x86 64.tar.gz 在该目录下多了一个解压后的文件夹

4.打开新的终端,

./bootstrap

make

make

install

5.此时会打开一个文件/root/.bashrc,找到export PATH=这些行,在这些行的下面另外添加一行,从而设置环境变量

export PATH=$PATH:/home/bnu/cmake-3.6.0-Linux-x86 64/bin

输入完毕保存

6.查看版本,ag国际厅官网|官方是否安装成功:打开终端,输入

cmake --version

结果是:cmake version 3.6.0(安装cmake成功!)

要知道,在根目录下安装cmake,那么不同用户都可以共享使用这个cmake.

本文来自投稿,不代表本站立场,如若转载,请注明出处。