Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在构建cython模块时覆盖-DNDEBUG编译标志 我有一个Cython模块,它通过 CDEF ExtReX//Cube调用C++函数。C++函数有 AsjtType()/Cuth>语句,我想检查这些断言。但是,当我通过调用python setup.py build\u ext--inplace创建模块时,gcc总是通过-DNDEBUG调用。无论何时运行代码,都不会检查断言_Python_C++_Cython - Fatal编程技术网

如何在构建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的替代方法