如何在构建cython模块时覆盖-DNDEBUG编译标志 我有一个Cython模块,它通过 CDEF ExtReX//Cube调用C++函数。C++函数有 AsjtType()/Cuth>语句,我想检查这些断言。但是,当我通过调用python setup.py build\u ext--inplace创建模块时,gcc总是通过-DNDEBUG调用。无论何时运行代码,都不会检查断言
我找不到使用如何在构建cython模块时覆盖-DNDEBUG编译标志 我有一个Cython模块,它通过 CDEF ExtReX//Cube调用C++函数。C++函数有 AsjtType()/Cuth>语句,我想检查这些断言。但是,当我通过调用python setup.py build\u ext--inplace创建模块时,gcc总是通过-DNDEBUG调用。无论何时运行代码,都不会检查断言,python,c++,cython,Python,C++,Cython,我找不到使用setup.py覆盖-DNDEBUG的方法。这可能吗 目前我找到的唯一解决方法是使用python setup.py使用的选项手动调用cython、gcc和g++,但要去掉-DNDEBUG。但必须有一种更简单的方法。您可以在包含之前,手动取消定义NDEBUG,如果定义了它的话。将以下行添加到包含这些断言语句的cpp文件的顶部。确保这些是该文件中的第一条语句 #ifdef NDEBUG # define NDEBUG_DISABLED # undef NDEBUG #endif #inc
setup.py
覆盖-DNDEBUG
的方法。这可能吗
目前我找到的唯一解决方法是使用
python setup.py
使用的选项手动调用cython、gcc和g++,但要去掉-DNDEBUG
。但必须有一种更简单的方法。您可以在包含
之前,手动取消定义NDEBUG
,如果定义了它的话。将以下行添加到包含这些断言语句的cpp文件的顶部。确保这些是该文件中的第一条语句
#ifdef NDEBUG
# define NDEBUG_DISABLED
# undef NDEBUG
#endif
#include <cassert>
#ifdef NDEBUG_DISABLED
# define NDEBUG // re-enable NDEBUG if it was originally enabled
#endif
// rest of the file
#ifdef NDEBUG
#定义NDEBUG\u已禁用
#未定义NDEBUG
#恩迪夫
#包括
#ifdef NDEBUG_已禁用
#定义NDEBUG//如果最初启用了NDEBUG,则重新启用
#恩迪夫
//文件的其余部分
这将确保处理器包含
时未定义NDEBUG
,这将导致将断言检查编译到代码中。您可以在setup.py文件中取消定义NDEBUG。定义扩展时只需使用undef_宏选项:
extensions = [ Extension ( "myprog", [ mysrc.c ], undef_macros = [ "NDEBUG" ] ) ]
在构建输出中,您将看到-DNDEBUG后跟-UNDEBUG,这将覆盖它。有关扩展选项的详细信息,请参阅
但是,请注意,在扩展模块中触发的断言将导致python或ipython解释器退出。请参阅。设置CFLAGS=“-UNDEBUG”也是编辑setup.py的替代方法