【发布时间】:2014-05-13 10:18:38
【问题描述】:
我接手的项目有多个构建方案:演示、发布、调试和生产。在整个代码中.. 有几个预处理器宏 if 语句,即
#ifdef DEMO
static NSString *const URL_SMART_TAXI = @"http://demo.theapp.com";
#elif PRODUCTION
static NSString *const URL_SMART_TAXI = @"http://prod.theapp.com";
#elif DEBUG
static NSString *const URL_SMART_TAXI = @"http://localhost:8000";
#else
static NSString *const URL_SMART_TAXI = @"http://dev.theapp.com";
#endif
由于某种原因,当我使用 demo 方案或 生产 方案进行构建时,这总是有效的。但它不适用于 调试(每当我更改方案并运行调试.. 它总是跳过调试并使用通配符选项)..
我查看了整个项目,我没有看到为演示或生产提供的任何特殊处理,而这些处理不是为调试提供的。
如果我运行grep -nri %environment% *,结果如下:
grep -nri production *
project.pbxproj:2767: 84380FEB1705D3E40085487D /* Production */ = {
project.pbxproj:2797: name = Production;
project.pbxproj:2799: 84380FEC1705D3E40085487D /* Production */ = {
project.pbxproj:2832: "-DPRODUCTION",
project.pbxproj:2846: name = Production;
project.pbxproj:3013: 84380FEB1705D3E40085487D /* Production */,
project.pbxproj:3024: 84380FEC1705D3E40085487D /* Production */,
xcshareddata/xcschemes/theApp.xcscheme:47: buildConfiguration = "Production"
grep -nri demo *
project.pbxproj:2685: 6314932116E4F7D000B351CA /* Demo */ = {
project.pbxproj:2715: name = Demo;
project.pbxproj:2717: 6314932216E4F7D000B351CA /* Demo */ = {
project.pbxproj:2751: "-DDEMO",
project.pbxproj:2765: name = Demo;
project.pbxproj:3012: 6314932116E4F7D000B351CA /* Demo */,
project.pbxproj:3023: 6314932216E4F7D000B351CA /* Demo */,
xcshareddata/xcschemes/theApp.xcscheme:87: buildConfiguration = "Demo"
grep -nri debug *
project.pbxproj:2848: 847D410E168CBD3700CE1B96 /* Debug */ = {
project.pbxproj:2863: "DEBUG=1",
project.pbxproj:2879: name = Debug;
project.pbxproj:2912: 847D4111168CBD3700CE1B96 /* Debug */ = {
project.pbxproj:2955: name = Debug;
project.pbxproj:2972: "DEBUG=1",
project.pbxproj:3010: 847D410E168CBD3700CE1B96 /* Debug */,
project.pbxproj:3021: 847D4111168CBD3700CE1B96 /* Debug */,
xcshareddata/xcschemes/theApp.xcscheme:26: selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
xcshareddata/xcschemes/theApp.xcscheme:27: selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
xcshareddata/xcschemes/theApp.xcscheme:29: buildConfiguration = "Debug">
xcshareddata/xcschemes/theApp.xcscheme:43: selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
xcshareddata/xcschemes/theApp.xcscheme:44: selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
xcshareddata/xcschemes/theApp.xcscheme:49: debugDocumentVersioning = "YES"
xcshareddata/xcschemes/theApp.xcscheme:72: debugDocumentVersioning = "YES">
xcshareddata/xcschemes/theApp.xcscheme:84: buildConfiguration = "Debug">
有什么想法吗?
更新: + 构建设置的相关部分
【问题讨论】:
-
您在
DEBUG=1之前缺少-D- 它应该是-DDEBUG=1。 -
那个额外的
D的目的是什么? -
这是一个用于定义宏的命令行开关 - 您可以在 PRODUCTION 和 DEMO 中使用它,但在 DEBUG 的情况下则缺少它。
-
@PaulR 但 DEBUG=1 是在我的
release方案中定义的。我从不使用它。我应该将 -DNS_BLOCK_ASSERTIONS=1 -DDEBUG 放在其他 C/C++ 标志下吗?但DNS_BLOCK_ASSERTIONS 似乎与我正在尝试做的事情无关 -
哦,我的坏..这两个是完全不同的东西..
标签: ios objective-c xcode macros c-preprocessor