Skip to content

Learning Rust #2 | ใช้ cargo run แบบ multiple targets

ถ้าเราสร้างโปรเจกต์ด้วยคำสั่ง cargo new my-project --bin  โปรเจกต์นั้นจะสามารถรัน target ได้แค่ target เดียวซึ่งก็คือโปรแกรมที่เขียนไว้ในไฟล์ src/main.rs แล้วถ้าเกิดว่าเราอยากรันหลายๆ target ล่ะ ทำยังไง?

จริงอยู่ที่แต่ละโปรเจกต์ควรทำหน้าที่เพียงอย่างเดียว มี main function เดียว แต่ถ้ากรณีที่เราต้องการทดลองโปรแกรมหลายๆ แบบซึ่งไม่มีความเกี่ยวข้องกันเลยในโปรเจกต์เดียวกันล่ะ? กรณีไหนบ้างที่ต้องทำแบบนี้? กรณีที่ชัดเจนที่สุดก็ตอนเริ่มเรียนรู้จากจาก example code ต่างๆ นี่ไงครับ

เข้าใจ Cargo.toml กันก่อน

ก่อนอื่นเราต้องเข้าใจ config ของ Cargo ก่อน ผมแนะนำให้อ่าน doc นี้ครับ

http://doc.crates.io/manifest.html

สิ่งที่เราต้องสนใจคือหัวข้อ The Project layout ซึ่งจะบอกว่าแต่ละไดเรกทอรีหรือไฟล์มีไว้ทำอะไรบ้าง

Config ไฟล์ Cargo.toml

โจทย์ของผมคือต้องการรันหลายๆ main.rs  ซึ่งอยู่ในไดเรกทอรีซึ่งอยู่ใต้ src/ อีกทีโดยแยกเป็นหลายๆ ไดเรกทอรีตามแต่ละเรื่องที่เราศึกษา (target) โดยเราสามารถ build โปรเจกต์และสั่งรันแต่ละ target ตามชื่อ target ได้

สมมุติว่าผมมี 2 targets คือ guessing-game และ loop โครงสร้างของโปรเจกต์จะเป็นแบบนี้

Selection_104

เสร็จแล้วก็แก้ไขไฟล์ Cargo.toml แล้วเพิ่มรายละเอียดของ [[bin]]  เข้าไป โดยระบุ name และ path ของ main.rs ตามนี้

สั่ง build และรันแต่ละ target

คำสั่งข้างบนจะเห็นว่าผมใส่ --bin  เสมอ ถ้าไม่ใส่จะพบ error แบบนี้

เนื่องจาก cargo อนุญาตให้มี executatble file เพียงอันเดียวเท่านั้น

Be First to Comment

Leave a Reply

Your email address will not be published.