我需要在编译时将string值传递给我的C程序:
-DNAME=value
我知道两种方式来做到这一点:如下所述的string化: https ://gcc.gnu.org/onlinedocs/cpp/Stringification.html
#define xstr(s) str(s) #define str(s) #s ... printf("%s\n", xstr(NAME));
我在这里的问题是在string内的macros被replace,所以我的string包含-linux-
它变成-1-
在Linux上。
另一种方法是在传递时尝试正确地引用string。 我从一个Python setup.py
文件如下所示:
macros = [('NAME', '"value"')]
或等同地
-DNAME='"value"'
那我就是
printf("%s\n", NAME);
但是我无法在Linux(gcc)和Windows(Python 2.7的MSVC 9)上find正确的方法。
这可能会因string可能包含/
, \
或%
而变得复杂,所以我需要做一些转义。
让我们回到setup.py
,这是需要工作的地方。
value = '"value"' # works on Linux but not Windows value = '\\"value\\"' # works on Windows but not Linux
由于我在Python中,我可以手动处理平台细节:
value = 'my/complicated%/string' quoted_value = '"{}"'.format(value) if sys.platform.startswith('win32'): quoted_value = quoted_value.replace('%', '%%') quoted_value = quoted_value.replace('"', '\\"')
更多的特殊字符会使这个更复杂。