ฉันยังใหม่กับ CMake และสับสนเล็กน้อยกับคำหลักtarget_link_libraries()
สาธารณะ, ส่วนตัวและอินเตอร์เฟซที่เกี่ยวข้องกับ. เอกสารระบุว่าสามารถใช้เพื่อระบุทั้งการอ้างอิงลิงก์และอินเทอร์เฟซลิงก์ในคำสั่งเดียว
การอ้างอิงลิงค์และอินเทอร์เฟซลิงค์หมายถึงอะไร?
ฉันยังใหม่กับ CMake และสับสนเล็กน้อยกับคำหลักtarget_link_libraries()
สาธารณะ, ส่วนตัวและอินเตอร์เฟซที่เกี่ยวข้องกับ. เอกสารระบุว่าสามารถใช้เพื่อระบุทั้งการอ้างอิงลิงก์และอินเทอร์เฟซลิงก์ในคำสั่งเดียว
การอ้างอิงลิงค์และอินเทอร์เฟซลิงค์หมายถึงอะไร?
คำตอบ:
หากคุณกำลังสร้างไลบรารีที่ใช้ร่วมกันและไฟล์ cpp ต้นทางของคุณ # รวมส่วนหัวของไลบรารีอื่น (เช่นพูด QtNetwork) แต่ไฟล์ส่วนหัวของคุณไม่มีส่วนหัว QtNetwork ดังนั้น QtNetwork จะเป็นการPRIVATE
อ้างอิง
หากไฟล์ต้นฉบับและส่วนหัวของคุณมีส่วนหัวของไลบรารีอื่นแสดงว่าเป็นการPUBLIC
อ้างอิง
หากไฟล์ส่วนหัวของคุณ แต่ไม่มีไฟล์ต้นฉบับของคุณมีส่วนหัวของไลบรารีอื่นแสดงว่าเป็นการINTERFACE
อ้างอิง
คุณสมบัติการสร้างอื่น ๆ ของPUBLIC
และการINTERFACE
อ้างอิงจะแพร่กระจายไปยังไลบรารีที่ใช้งาน http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements
PUBLIC
หรือPRIVATE
สำคัญ? มันเปลี่ยนอะไร?
PRIVATE
ไม่ได้เพิ่มการอ้างอิงของคุณไปยังโปรเจ็กต์ที่เชื่อมโยงกับไลบรารีของคุณ มันสะอาดกว่าและยังหลีกเลี่ยงความขัดแย้งที่อาจเกิดขึ้นระหว่างการอ้างอิงของคุณกับผู้ใช้ของคุณ
PUBLIC
พึ่งพาไม่ใช่ การINTERFACE
พึ่งพา