首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过修复wx-3.0符号,在Linux Mageia 5中成功构建Kicad 4.0.6

通过修复wx-3.0符号,在Linux Mageia 5中成功构建Kicad 4.0.6
EN

Stack Overflow用户
提问于 2017-07-17 03:54:45
回答 1查看 76关注 0票数 1

我已经成功地在Linux Mageia 5.1和gcc 4.9.2版本中构建了Kicad 4.0.6。我首先手动修复了/usr/include/wx-3.0/wx/目录中的两个wxWidgets 3.0.2头文件: regex.h和features.h。然后Kicad成功编译。使用本机wx-3.0头,由于未定义的变量wxRE_ADVANCED,编译器在pcbnew/netlist_reader.cpp中生成错误。

features.h头文件检查是否定义了宏WX_NO_REGEX_ADVANCED。如果是,则将.h UNdefines wxHAS_REGEX_ADVANCED宏作为特征,如果否,则对其进行定义。反过来,在regex.h中使用宏wxHAS_REGEX_ADVANCED来确定枚举常量中是否存在wxRE_ADVANCED =1。我使用Mageia存储库WX_NO_REGEX_ADVANCED中的Mageia软件管理器安装的标准预构建Mageia5包wxgtku3.0_0和lib64wxgtku3.0-devel是定义的,因此wxHAS_REGEX_ADVANCED是未定义的,因此wxRE_ADVANCED也是未定义的。Kicad 4.0.6源包假定wxRE_ADVANCED = 1,因此构建过程停止并出现错误。

然后,我将/usr/include/wx-3.0/wx/regex.h和features.h恢复为它们的原始状态,并学习了如何将wxRE_ADVANCED的定义添加到CMakeLists.txt中。然而,我仍然有一个问题。

我在CMake command line for C++ #define上找到的将该定义添加到CMakeLists.txt的推荐格式是:

代码语言:javascript
复制
if (NOT DEFINED wxRE_ADVANCED)
  set(wxRE_ADVANCED 1)
endif()

add_definitions(-DwxRE_ADVANCED=$(wxRE_ADVANCED))

然而,它并没有起作用!pcbnew/netlist_reader.cpp中wxRE_ADVANCED的宏扩展为空。我在编译时打印了它,并将以下几行插入到netlist_reader.cpp文件中(这很难找到,大多数推荐的格式都不起作用。正确的是在C preprocessor: expand macro in a #warning中):

代码语言:javascript
复制
#define __STRINGIFY(TEXT) #TEXT
#define __WARNING(TEXT) __STRINGIFY(GCC warning TEXT)
#define WARNING(VALUE) __WARNING(__STRINGIFY(wxRE_ADVANCED = VALUE))

Pragma (WARNING(wxRE_ADVANCED))

最后,我将CMakeLists.txt定义简化为以下内容,并取得了成功:

代码语言:javascript
复制
if (NOT DEFINED wxRE_ADVANCED)
  set(wxRE_ADVANCED 1)
endif()

add_definitions(-DwxRE_ADVANCED=1)

我的问题是:如果"-DwxRE_ADVANCED=$(wxRE_ADVANCED)“不起作用,它的意思是什么?有没有可能不使用set(wxRE_ADVANCED 1),而只是写add_definitions(-DwxRE_ADVANCED=1)?谢谢。

附注:是的,Kicad 4.0.6构建过程成功完成,但在顶层CMakeLists.txt文件中只添加了一行:

代码语言:javascript
复制
add_definitions(-DwxRE_ADVANCED=1) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-17 04:02:54

通过$variable${variable}调用变量。注意大括号,而不是圆括号。

另外,建议使用:

代码语言:javascript
复制
target_compile_definitions(mytarget PUBLIC wxRE_ADVANCED=1)

直接在目标上,而不是一般的add_definitions()命令。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45132762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档