我使用CMake与GNU Make,并希望完全看到所有命令(例如编译器如何执行,所有标志等).
GNU make有--debug
,但似乎没有任何其他选项有用吗?CMake是否在生成的Makefile中提供了额外的标志以进行调试?
我从第三方代码中得到了很多这些警告,我无法修改.有没有办法禁用此警告或至少禁用某些区域(如VC++中的#pragma push/pop)?
例:
list.h:1122: warning: `list<LogOutput*, allocator<LogOutput*> >::node_alloc_' will be initialized after
list.h:1117: warning: `allocator<LogOutput*> list<LogOutput*, allocator<LogOutput*> >::alloc_'
Run Code Online (Sandbox Code Playgroud) 我尝试编写一个React组件.对于html标题标签(h1,h2,h3等),其中标题优先级根据我们在props中定义的优先级动态变化.
这就是我尝试做的事情.
<h{this.props.priority}>Hello</h{this.props.priority}>
预期产量:
<h1>Hello</h1>
这不起作用.有没有可行的方法来做到这一点?
如何使用CMake为项目(而不是整个解决方案)设置警告级别?应该在Visual Studio和GCC上工作.
我找到了各种选项,但大多数似乎不工作或与文档不一致.
什么是关键词的含义PUBLIC
,PRIVATE
以及INTERFACE
相关的CMake的target_include_directories
?
我用CMake找到Boost.找到了Boost,但CMake出错了
导入的目标不适用于Boost版本
请参阅下面的完整错误(来自macOS).我究竟做错了什么?
CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
Imported targets not available for Boost version 106300
Call Stack (most recent call first):
/Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
/Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
CMakeLists.txt:6 (find_package)
Boost version: 1.63.0
Found the following Boost libraries:
thread
CMake Warning at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:743 (message):
Imported targets not available for Boost version 106300
Call Stack (most recent call first):
/Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:842 (_Boost_COMPONENT_DEPENDENCIES)
/Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1395 (_Boost_MISSING_DEPENDENCIES)
CMakeLists.txt:7 (find_package)
Run Code Online (Sandbox Code Playgroud) 所以这是世界上最简单的glib程序:
#include <glib.h>
Run Code Online (Sandbox Code Playgroud)
我尝试编译它,gcc test.c
我得到:
test.c:1:18: error: glib.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以我确保我有合适的包裹:
# dpkg -l | grep libglib
ii libglib-perl 1:1.183-1 Perl interface to the GLib and GObject libra
ii libglib1.2-dev 1.2.10-19build1 The GLib library of C routines (development)
ii libglib1.2ldbl 1.2.10-19build1 The GLib library of C routines
ii libglib2.0-0 2.20.1-0ubuntu2 The GLib library of C routines
ii libglib2.0-cil 2.12.1-1ubuntu2 CLI binding for the GLib utility library 2.1
ii libglib2.0-data 2.18.2-0ubuntu2 Common files for GLib library …
Run Code Online (Sandbox Code Playgroud) 我想检查列表是否包含特定条目,如下面的代码片段:
macro(foo)
if ($(ARGN} contains "bar")
...
endif
endmacro()
Run Code Online (Sandbox Code Playgroud)
CMake不提供contains
.获得理想结果的最佳/最简单方法是什么?
在CMake的wiki中,我找到了一个LIST_CONTAINS宏,但是wiki页面已经过时了.这仍然是最好的方式还是CMake获得了新功能?
我有几个小组件,我正在构建为我的主应用程序的共享库.允许使用的一个例子liba
和libb
.每个都在它们自己的子目录中构建,如下所示:
add_library(liba SHARED a.cpp)
Run Code Online (Sandbox Code Playgroud)
然后,在根项目文件夹中,我需要将我的主应用程序链接到两者.
include_directories(a)
include_directories(b)
add_executable(dummy dummy.cpp)
target_link_libraries(dummy a b)
Run Code Online (Sandbox Code Playgroud)
CMake运行正常,我的应用程序编译但无法链接.问题是b引用了a.如果我在链接时提供库的顺序
target_link_libraries(dummy b a)
Run Code Online (Sandbox Code Playgroud)
该程序编译和链接就好了
当这种系统开始涉及更复杂的库之间的依赖关系时,即使依赖关系是非循环的,它也开始变得不可能.如何在此管理链接步骤?在CMake中订购库以进行链接是否有诀窍?
我在我的Ubuntu Linux上安装了CMake.试图在Linux中运行CMake GUI.我发现它适用于Windows,但在哪里获取它以及如何在Linux中运行?