相关疑难解决方法(0)

如何在CMake中设置警告级别?

如何使用CMake项目(而不是整个解决方案)设置警告级别?应该在Visual StudioGCC上工作.

我找到了各种选项,但大多数似乎不工作或与文档不一致.

cmake warning-level

104
推荐指数
5
解决办法
7万
查看次数

在CMake中设置通用编译标志的现代方法是什么?

CMake提供了多种机制来获取编译器的标志:

在现代使用中,是否有一种方法比另一种方法更受欢迎?如果是这样的话?此外,该方法如何与MSVC等多种配置系统一起使用?

cmake

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

谷歌测试:代码覆盖率

是否可以使用谷歌测试框架通过测试完成代码覆盖?

c++ code-coverage googletest

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

cmake有类似target_link_options的东西吗?

您可以在INTERFACE库(foo)上设置COMPILE_OPTIONS ,这些COMPILE_OPTIONS也将由foo的用户使用 .

add_library(foo INTERFACE)
target_link_libraries(foo INTERFACE foo_1)
target_compile_options(foo INTERFACE "-DSOME_DEFINE")
add_executable(exe exe.cpp)
target_link_libraries(exe foo)
Run Code Online (Sandbox Code Playgroud)

是否可以为LINK_FLAGS做类似的事情?

cmake

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

如何使用CMake链接到C数学库?

如何将math库添加到我的CMake文件中?这篇文章引用了添加一个目标链接库,但我对C不太熟悉.附加帖子 - 有人可以举一个例子.文档我正在使用C,我收到了一个undefined reference to 'pow'带有数学标题的pow方法.

cmake_minimum_required(VERSION 3.3)
project(CSCI-E-28-Unix-Linux-Systems-Programming)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES
    CMakeLists.txt
    getchar.c
    main.cpp
        hw0
    more01.c)

#target_link_libraries(<math.h> m)

add_executable(main main.cpp)
add_executable(getchar getchar.c)
add_executable(more01 more01.c)
add_executable(argu print_all_arguments.c)
add_executable(chars chars.c)
add_executable(ch4 ch4.c)
Run Code Online (Sandbox Code Playgroud)

c cmake

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

add_compile_options和SET之间的区别(CMAKE_CXX_FLAGS ...)

这个问题与Instruct Cmake在驾驶链接时使用CXX和CXXFLAGS有关吗?在前一个问题中,我们试图指示CMake CXXFLAGS在调用链接器时使用它.

add_compile_options

我们发现以下代码

if (CMAKE_VERSION VERSION_LESS 2.8.12)
    add_definitions(-foo)
else()
    add_compile_options(-foo)
endif()

message(STATUS, "CXXFLAGS: ${CMAKE_CXX_FLAGS}")
Run Code Online (Sandbox Code Playgroud)

产生输出

CXXFLAGS:
Run Code Online (Sandbox Code Playgroud)

SET CMAKE_CXX_FLAGS

我们发现以下代码

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -foo" )

message(STATUS, "CXXFLAGS: ${CMAKE_CXX_FLAGS}")
Run Code Online (Sandbox Code Playgroud)

产生输出

CXXFLAGS: -foo
Run Code Online (Sandbox Code Playgroud)

问题

我们发现CMake会-foo在两种情况下都使用它来创建目标文件.所以-foo肯定是进入了CXXFLAGS.

第一组CMake代码和第二组CMake代码之间有什么区别?

为什么CMAKE_CXX_FLAGS在一个实例中未设置,并在另一个实例中设置?

cmake compiler-options

22
推荐指数
1
解决办法
2万
查看次数

使用CMake打开链接器标志

当使用CMake生成VS2010目标时,我希望/ LTCG标志打开(如果可能的话,仅用于发布+ releasewithdebinfo,但是如果它打开调试则可以).如何修改链接器标志?add_definitions()不起作用,因为它只修改编译器标志.是的,我把它包裹在if(MSVC)中.

如何修改链接器标志?

c c++ linker cmake visual-studio-2010

20
推荐指数
1
解决办法
2万
查看次数

[[maybe_unused]] 在成员变量上,GCC 警告(错误地?)该属性被忽略

在以下示例中

struct Foo {
    [[maybe_unused]] int member = 1;
    void bar() {
        [[maybe_unused]] int local = 0;
    }
};

int main(int argc, char* argv[]) {
    Foo f{};
    f.bar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC 发出警告,其中 Clang 和 MSVC 没有:

warning: 'maybe_unused' attribute ignored [-Wattributes]
     [[maybe_unused]] int member = 1;
Run Code Online (Sandbox Code Playgroud)

据我所知,这应该是合法的(并且不会被编译器忽略)。根据标准

10.6.7 可能未使用的属性 [dcl.attr.unused]
...
2. 该属性可以应用于类的声明、typedef-name、变量、非静态数据成员、函数、枚举,或枚举器。
...

我讨厌在“编译器错误”锤子上摇摆不定,但我不确定在这种情况下还有什么可能。

有没有人有任何见解?

c++ compiler-warnings compiler-bug c++17

12
推荐指数
2
解决办法
3223
查看次数

cmake list append for compiler flags会产生伪造的结果?

我需要在我的CMake文件(CMake 2.8.10.2)中为我的C和C++编译行添加各种标志.我看到有些人使用add_definitions但是我可以看到它用于预处理器标志(-D).我有一些我不想传递给预处理器的标志.

所以我一直在努力修改CMAKE_C_FLAGSCMAKE_CXX_FLAGS.我看到有些人正在使用类似的东西:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -new -flags -here")
Run Code Online (Sandbox Code Playgroud)

但后来我在cmake文档中读到这样效率较低,正确的方法是使用list(APPEND ...),如下所示:

list(APPEND CMAKE_C_FLAGS -new -flags -here)
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我的编译行包含由分号分隔的标志,并且是语法错误.我读到这是现在列表存储在内部,但我认为这将由cmake在我使用变量时处理.这看起来很基本; 难道我做错了什么?我的意思是,如果这些列表不能被使用,除非你碰巧想要一个以分号分隔的值列表(除了我想要的Windows%PATH%设置或其他东西)之外,这些列表的好处是什么?我是否应该使用引用的版本,即使文档表明它效率较低/不合适?

cmake

9
推荐指数
2
解决办法
1万
查看次数

什么相当于cmake中gcc的-mwindows选项?

我跟着tuto:

http://zetcode.com/tutorials/gtktutorial/firstprograms/

它工作,但每次我双击可执行文件,有一个控制台,我不希望它在那里.

我如何摆脱那个控制台?

我试过这个:

add_executable(Cmd WIN32 cmd.c)
Run Code Online (Sandbox Code Playgroud)

但得到了这个致命的错误:

MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
Cmd.exe : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)

使用gcc直接工作:

gcc -o Cmd cmd.c -mwindows ..
Run Code Online (Sandbox Code Playgroud)

我猜这与入门函数有关:int main( int argc, char *argv[])但为什么gcc有效?

我怎样才能使用它cmake

UPDATE

为方便起见,我这里粘贴源代码:

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);

  gtk_main();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

UPDATE2

为什么gcc -mwindows有效但add_executable(Cmd WIN32 cmd.c)不是?

也许这不是 …

c windows gtk cmake

8
推荐指数
2
解决办法
4357
查看次数