как определить символ препроцессора в xcode

<p>можно ли установить символ для условной компиляции путем настройки свойств в проекте xcode?</p><p>моя цель состоит в том, чтобы создать символ, который будет доступен для всех файлов, без необходимости использовать импорт/включение, чтобы набор общих классов мог иметь особое поведение в некоторых проектах. как и в следующем, но с моими собственными символами.</p><pre><code>#if target\_iphone\_simulator ... #endif </code></pre>

<p>перейдите к настройкам target или project, щелкните значок gear в левом нижнем углу и выберите "add user-defined setting". имя нового параметра должно быть <code>gcc\_preprocessor\_definitions</code>, и вы можете ввести свои определения в правом поле.</p><p>согласно комментариям стефа, полный синтаксис:</p><pre><code>constant\_1=value constant\_2=value </code></pre><p>обратите внимание, что вы не <i>необходимость</i> '=', если вы просто хотите # определить символ, а не присваивать ему значение (для операторов <code>#ifdef</code>)</p>

<p>вам не нужно создавать пользовательские настройки. встроенная настройка "макросы препроцессора" работает просто отлично. <a href="http://idisk.mac.com/cdespinosa/public/picture%204.png">альтернативный текст http://idisk.mac.com/cdespinosa/public/picture%204.png</a> </p><p>если у вас есть несколько целей или проектов, которые используют один и тот же файл префикса, используйте вместо этого макросы препроцессора, которые не используются в предварительно скомпилированных заголовках, поэтому различия в определении макроса не приводят к ненужному дополнительному набору предварительно скомпилированных заголовков.</p>

<p>в качестве дополнения, если вы используете эту технику для определения строк в вашей цели, вот как я должен был определить и использовать их:</p><p>в настройках сборки -> макросы препроцессора, и обратная косая черта да имеет решающее значение в определении:</p><pre><code>appurl\_nsstring=\@\"www.foobar.org\" </code></pre><p>и в исходном коде:</p><pre><code>objectmanager.client.baseurl = appurl\_nsstring; </code></pre>

<p>вы можете использовать файл <code>*\_prefix.pch</code> для объявления макросов проекта. этот файл обычно находится в вашей группе <strong>другие источники</strong>.</p>

<p>он находится в разделе "gcc 4.2 preprocessing" (или просто поместите "prepro" в поле поиска) ...</p><p>... однако, для моей жизни я не могу заставить его работать.</p><p>у меня есть стандартные конфигурации debug и release, и я хочу определить debug = 1 в конфигурации отладки. но после добавления его в качестве значения:</p><p>(в окне настроек)> макросы препроцессора: debug = 1</p><pre><code>#if debug printf("debug is set!"); #endif </code></pre><p>... никогда не печатает/не вызывается. это сводит меня с ума...</p>

<p>в ответ на комментарий кевина лейти (см. ответ cdespinosa) о том, что раздел "предварительная обработка gcc" не отображается в настройках вашей сборки, сделайте active sdk тем, который говорит (base sdk) после него, и этот раздел появится. это можно сделать, выбрав меню "проект"> "установить активную цель"> "xxx" (базовый sdk). в разных версиях xcode (базовый sdk) может быть разным, например (project setting или project default).</p><p>после появления этого раздела вы можете добавить свои определения в макросы процессора, а не создавать пользовательские настройки.</p>

<p>для xcode 9.4.1 и c++ проекта. добавление макросов препроцессора <code>const char*</code> в обе сборки <em> </em> и <em> </em>.</p><ol> <li> <p>выберите свой проект</p> <p> <a href="https://i.stack.imgur.com/rlafn.png"><img src="https://i.stack.imgur.com/rlafn.png" alt="select project"></a> </p> </li> <li> <p>выберите <em> настройки сборки </em></p> <p> <a href="https://i.stack.imgur.com/esage.png"><img src="https://i.stack.imgur.com/esage.png" alt="select build settings"></a> </p> </li> <li> <p>поиск "<em> макросы препроцессора </em>"</p> <p> <a href="https://i.stack.imgur.com/41srj.png"><img src="https://i.stack.imgur.com/41srj.png" alt="search1"></a> <a href="https://i.stack.imgur.com/dnzxq.png"><img src="https://i.stack.imgur.com/dnzxq.png" alt="search2"></a> </p> </li> <li> <p>открыть интерактивный список</p> <p> <a href="https://i.stack.imgur.com/eg6sz.png"><img src="https://i.stack.imgur.com/eg6sz.png" alt="open interactive list"></a> </p> </li> <li> <p>добавьте свои макросы и не забудьте избежать цитаты</p> <p> <a href="https://i.stack.imgur.com/laqhp.png"><img src="https://i.stack.imgur.com/laqhp.png" alt="add path"></a> </p> </li> <li> <p>использовать в исходном коде как обычный <code>const char*</code></p> <pre><code>... #ifndef json\_definitions\_file\_path static constexpr auto json\_definitions\_file\_path = "definitions.json"; #endif ... file *pfilein = fopen(json\_definitions\_file\_path, "r"); ... </code></pre></li> </ol>

<p>вы можете продублировать целевой объект с разделом предварительной обработки, переименовать его на любое имя и изменить значение макроса препроцессора.</p>