Score:0

รวบรวมโครงการรวม C และวัตถุประสงค์ C โดยใช้ cmake

ธง fr

โครงการของฉันมีทั้งซอร์สโค้ด C และ Objective-C และฉันกำลังจะสร้าง makefile โดยใช้ cmake โดยพื้นฐานแล้วมันถูกสร้างขึ้นใน MacOS แต่ตอนนี้มันจะถูกนำมาใช้ใน Ubuntu

ดังนั้นฉันจึงได้ติดตั้งแพ็คเกจที่จำเป็นสำหรับ Objective-C และเพิ่งเพิ่มทั้งไฟล์ *.m และ *.c เข้าด้วยกันในการกำหนดค่า แต่มันไม่ได้คอมไพล์ ต่อไปนี้เป็นข้อความแสดงข้อผิดพลาด

ในไฟล์รวมจาก /usr/include/GNUstep/Foundation/NSObject.h:30,
                 จาก /usr/include/GNUstep/Foundation/FoundationErrors.h:29,
                 จาก /usr/include/GNUstep/Foundation/Foundation.h:33,
                 จาก /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:230:16: คำเตือน: การประกาศซ้ำซ้อนของ âNSSelectorFromStringâ [-Wredundant-decls]
  230 | GS_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
      | ^~~~~~~~~~~~~~~~~~~~~~
/usr/include/GNUstep/Foundation/NSObjCRuntime.h:228:16: หมายเหตุ: การประกาศก่อนหน้านี้ของ âNSSelectorFromStringâ อยู่ที่นี่
  228 | GS_EXPORT SEL NSSelectorFromString(NSString *aSelectorName);
      | ^~~~~~~~~~~~~~~~~~~~~~
ในไฟล์รวมจาก /usr/include/GNUstep/Foundation/NSDebug.h:39,
                 จาก /usr/include/GNUstep/Foundation/Foundation.h:36,
                 จาก /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:45:16: คำเตือน: การประกาศซ้ำซ้อนของ âGSDebugSetâ [-Wredundant-decls]
   45 | GS_EXPORT BOOL GSDebugSet(NSString *ระดับ);
      | ^~~~~~~~~~
ในไฟล์รวมจาก /usr/include/GNUstep/GNUstepBase/NSDebug+GNUstepBase.h:36
                 จาก /usr/include/GNUstep/Foundation/NSDebug.h:39,
                 จาก /usr/include/GNUstep/Foundation/Foundation.h:36,
                 จาก /home/khan/Documents/work/tun2socks-iOS/base/BLog.m:32:
/usr/include/GNUstep/Foundation/NSProcessInfo.h:287:16: หมายเหตุ: การประกาศก่อนหน้านี้ของ âGSDebugSetâ อยู่ที่นี่
  287 | GS_EXPORT BOOL GSDebugSet(NSString *ระดับ);
      | ^~~~~~~~~~
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m: ในฟังก์ชัน âstdout_logâ:
/home/khan/Documents/work/tun2socks-iOS/base/BLog.m:55:5: ข้อผิดพลาด: ไม่พบการประกาศอินเทอร์เฟซสำหรับ âNXConstantStringâ
   55 | NSLog(@"%s(%s): %s\n", level_names[ระดับ], blog_global.channels[channel].name, msg);
      | ^~~~~
ทำ [2]: *** [base/CMakeFiles/base.dir/build.make:76: base/CMakeFiles/base.dir/BLog.m.o] ข้อผิดพลาด 1
ทำ [1]: *** [CMakeFiles/Makefile2:283: base/CMakeFiles/base.dir/all] ข้อผิดพลาด 2
ทำ: *** [Makefile:130: ทั้งหมด] ข้อผิดพลาด 2

และนี่คือ CMakeList.txt ของไดเรกทอรีย่อยของฉัน

ชุด (BASE_ADDITIONAL_SOURCES)

ถ้า (HAVE_SYSLOG_H)
    รายการ (APPEND BASE_ADDITIONAL_SOURCES BLog_syslog.c)
เอนดิฟ ()

ชุด (BASE_SOURCES
    DebugObject.c
    BLog.m
    BPending.c
    ${BASE_ADDITIONAL_SOURCES}
)
badvpn_add_library(ฐาน "" "" "${BASE_SOURCES}")

ปัญหาหลักที่นี่คือโครงการมีทั้งไฟล์ Objective-C และ C ฉันรู้ว่าเมื่อใดที่ใช้เฉพาะ Objective-C ซึ่งเป็นแฟล็กเพิ่มเติม gnustep-config --objc-ธง ต้องระบุ แต่ไม่แน่ใจว่าฉันจะจัดการสิ่งนี้ได้อย่างไรเมื่อมีซอร์สโค้ด 2 ภาษาที่ต่างกันผสมกัน

ขออภัยสำหรับภาษาอังกฤษที่ไม่ดีของฉัน และขอขอบคุณล่วงหน้าสำหรับคำแนะนำของคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา