Скомпилируйте проект, объединив C и цель C, используя cmake

Мой проект содержит исходный код как на C, так и на Objective-C, и я собираюсь сгенерировать make-файл с помощью cmake. В основном он был построен в MacOS, но теперь он будет использоваться в Ubuntu.

Итак, я установил необходимые пакеты для Objective-C и просто добавил файлы *.m и *.c вместе в конфиг, но он не компилируется. Ниже приведено сообщение об ошибке.

      In file included from /usr/include/GNUstep/Foundation/NSObject.h:30,
                 from /usr/include/GNUstep/Foundation/FoundationErrors.h:29,
                 from /usr/include/GNUstep/Foundation/Foundation.h:33,
                 from /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:230:16: warning: redundant redeclaration of ‘NSSelectorFromString’ [-Wredundant-decls]
  230 | GS_EXPORT SEL  NSSelectorFromString(NSString *aSelectorName);
      |                ^~~~~~~~~~~~~~~~~~~~
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:228:16: note: previous declaration of ‘NSSelectorFromString’ was here
  228 | GS_EXPORT SEL  NSSelectorFromString(NSString *aSelectorName);
      |                ^~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/GNUstep/Foundation/NSDebug.h:39,
                 from /usr/include/GNUstep/Foundation/Foundation.h:36,
                 from /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:45:16: warning: redundant redeclaration of ‘GSDebugSet’ [-Wredundant-decls]
   45 | GS_EXPORT BOOL GSDebugSet(NSString *level);
      |                ^~~~~~~~~~
In file included from /usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:36,
                 from /usr/include/GNUstep/Foundation/NSDebug.h:39,
                 from /usr/include/GNUstep/Foundation/Foundation.h:36,
                 from /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSProcessInfo.h:287:16: note: previous declaration of ‘GSDebugSet’ was here
  287 | GS_EXPORT BOOL GSDebugSet(NSString *level);
      |                ^~~~~~~~~~
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m: In function ‘stdout_log’:
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m:55:5: error: cannot find interface declaration for ‘NXConstantString’
   55 |     NSLog(@"%s(%s): %s\n", level_names[level], blog_global.channels[channel].name, msg);
      |     ^~~~~
make[2]: *** [base/CMakeFiles/base.dir/build.make:76: base/CMakeFiles/base.dir/BLog.m.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:283: base/CMakeFiles/base.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

А это CMakeList.txt моего подкаталога.

      set(BASE_ADDITIONAL_SOURCES)

if (HAVE_SYSLOG_H)
    list(APPEND BASE_ADDITIONAL_SOURCES BLog_syslog.c)
endif ()

set(BASE_SOURCES
    DebugObject.c
    BLog.m
    BPending.c
    ${BASE_ADDITIONAL_SOURCES}
)
badvpn_add_library(base "" "" "${BASE_SOURCES}")

Основная проблема здесь в том, что проект содержит файлы Objective-C и C. Я знаю, когда используется только Objective-C, дополнительный флаг должен быть указан, но не уверен, как я могу справиться с этим, когда смешиваются исходные коды на двух разных языках.

Извините за мой плохой английский, и заранее спасибо за ваш совет.

0 ответов

Другие вопросы по тегам