相关疑难解决方法(0)

如何使用CMAKE_EXPORT_COMPILE_COMMANDS?

我一直在尝试使用clang-modernize与CMAKE_EXPORT_COMPILE_COMMANDS在该工具的帮助推荐.

使用此选项,cmake会生成一个包含编译信息(如include路径)的JSON文件(另请参阅).

此变量在cmake的命令行中被接受,但cmake --help-variable CMAKE_EXPORT_COMPILE_COMMANDS不起作用(这与此邮件列表发布一致).

有人知道如何使用它吗?

我也可以用cppcheck.

更多信息

我在clang开发者论坛上发现,这个cmake功能并非在所有生成器上都可用.这可能会在未来发生变化,同时我的问题仍然存在,我也会尝试看看如果我使用其他生成器而不是Visual Studio会发生什么.

c++ cmake clang cppcheck

23
推荐指数
3
解决办法
3万
查看次数

如何打印使用target_compile_options()设置的当前编译标志?

我正在尝试打印为目标设置的编译标志。最好的情况是在配置和编译时打印一条带有当前标志的行,但是,如果不可能,则仅在配置时(或仅编译)(可接受的解决方案)打印。

这是我的测试.c文件:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(cmake_gcc_options_try_c C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

add_executable(cmake_gcc_options_try_c main.c)

target_compile_options(cmake_gcc_options_try_c 
                       PUBLIC -W -Wall -Wextra -pedantic -pedantic-errors)

# This fails
message("-- Current compiler flags CMAKE_C_FLAGS are: ${CMAKE_C_FLAGS}")
message("-- Current compiler flags C_FLAGS are: ${C_FLAGS}")
Run Code Online (Sandbox Code Playgroud)

和

cmake . && make
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

-- The C compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C …
Run Code Online (Sandbox Code Playgroud)

build-automation makefile cmake compiler-flags

8
推荐指数
1
解决办法
702
查看次数

检索CMake中的所有链接标志

在CMake中,是否可以以编程方式检索将用于给定目标的链接器标志的完整列表?我看到的唯一方法是检查link.txt目标CMakeFiles目录中的文件。不理想。

我感兴趣的用例是收集数据,以将其包含在pkg-config文件之类的文件中。我正在编写一个库,它包括几个使用该库的可执行实用程序。构建可执行文件(尤其是在静态构建库时)需要一条非平凡的链接行来链接到我的库及其依赖项。因此,我想写出将这些可执行文件构建到包中包含的数据文件中所需的链接行,以便其他客户端可以知道如何链接。

cmake

6
推荐指数
1
解决办法
1413
查看次数