ฉันยังใหม่กับ 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พึ่งพา