Я думаю, что это - потому что "объектные базы данных" решают проблему, которую (почти) никто действительно не имеет. Для простой персистентности графов объектов сериализация, встроенная в большинство сред OO, "достаточно хороша". Если Вы хотите сделать сложные операции на подмножестве Ваших данных, то реляционная база данных и SQL являются идеальным соответствием.
Кроме некоторых приложений края (огромные графы объектов, которые не могут быть сохранены в памяти, но для которого отношения не упрощают вниз хорошо для использования RDBMS), действительно нет никакой потребности в этих инструментах.
В вашем проекте нужны две цели; цель в Xcode создает продукт , который представляет собой библиотеку, исполняемый файл или какой-либо другой вывод.
Таким образом, у вас будет цель для создания libatom.dylib
, что, как я подозреваю, вы уже настроили, и еще одну исполняемую цель командной строки для создания исполняемого файла test-atom
, который вы сможете запустить для тестирования своей библиотеки.
После того, как вы добавили test- Atom
target, вы должны получить информацию о test-atom.c
и удалить его членство из libatom.dylib
target и добавить его как цель член вашей новой цели test-atom
. Целевое членство в файле - это то, что определяет, будет ли при построении цели попытаться скомпилировать / скопировать / связать этот файл. (Что делает целевой объект с файлом, зависит от того, на какой этап сборки он добавляется, когда становится членом.)
Вы также должны получить информацию о записи libatom.dylib
в вашей группе продуктов и сделать , что также является членом мишени test-atom
. Это приведет к тому, что исполняемый файл test-atom
соединится с libatom.dylib
.
Наконец, Get Info on the test-atom
target (не продукт ) и на вкладке Общие добавьте зависимость от цели libatom.dylib
. Это гарантирует, что при построении цели test-atom
сначала всегда будет строиться цель libatom.dylib
.
Вам также следует получить информацию о записи libatom.dylib
в вашей группе продуктов и сделать этот членом целевого объекта test-atom
как хорошо. Это приведет к тому, что исполняемый файл test-atom
соединится с libatom.dylib
.
Наконец, Get Info on the test-atom
target (не продукт ) и на вкладке Общие добавьте зависимость от цели libatom.dylib
. Это гарантирует, что при построении цели test-atom
сначала всегда будет строиться цель libatom.dylib
.
Вам также следует получить информацию о записи libatom.dylib
в вашей группе продуктов и сделать этот членом целевого объекта test-atom
как хорошо. Это приведет к тому, что исполняемый файл test-atom
соединится с libatom.dylib
.
Наконец, Get Info on the test-atom
target (не продукт ) и на вкладке Общие добавьте зависимость от цели libatom.dylib
. Это гарантирует, что при построении цели test-atom
сначала всегда будет строиться цель libatom.dylib
.
test-atom
соединится с libatom.dylib
.
Наконец, Get Info on the test-atom
target (не продукт ) и на вкладке «Общие» добавьте зависимость от цели libatom.dylib
. Это гарантирует, что при построении цели test-atom
сначала всегда будет строиться цель libatom.dylib
.
test-atom
соединится с libatom.dylib
.
Наконец, Get Info on the test-atom
target (не продукт ) и на вкладке «Общие» добавьте зависимость от цели libatom.dylib
. Это гарантирует, что при построении цели test-atom
сначала всегда будет строиться цель libatom.dylib
.
Изменить: см. Автоматическое модульное тестирование с Xcode 3 и Objective-C (более поздняя версия статьи, на которую я изначально ссылался, как указано в комментарии ниже) . Также см. Каков наилучший способ модульного тестирования кода Objective-C? Хотя вы явно еще не используете Obj-C, основы установки новых целей будут такими же для кода C, и Специфические для OCUnit элементы очень хорошо отражают работу модульного тестирования в среде IDE.