با توجه به متن خطا مشکلی در اینکلود شدن فایل هدرتون وجود نداره چون در غیر این صورت موقع کامپایل خطایی شبیه به این نمایش داده میشد:
main.c:1:10: fatal error: your_lib.h: No such file or directory
این ارور، ارور لینکر هستش و معنیش اینه که فقط فایل main.c به تنهایی کامپایل شده و بهمین دلیل در مرحله لینک شدن این مشکل پیش اومده. با فرض اینکه از gcc استفاده میکنید انگار چنین دستوری اجرا شده باشه:
gcc main.c -o output
در صورتی که باید اون فایل c که شامل تعریف (definition) توابع تون هست هم کامپایل بشه؛ یعنی به این صورت:
gcc main.c your_lib.c -o output
در این زمینه با vscode کار نکردم و آشنایی ندارم اما یه سرچ کلی کردم به نظر میاد در یک سری فایل json که مربوط به پروژه میشه باید اسم فایلهای c درج شده باشه که احتمالا پلاگینی برای انجام خودکار این کار وجود داره. پیشنهاد میکنم عبارت multi-file c/c++ project vscode رو سرچ کنید.
با توجه به متن خطا مشکلی در اینکلود شدن فایل هدرتون وجود نداره چون در غیر این صورت موقع کامپایل خطایی شبیه به این نمایش داده میشد:
main.c:1:10: fatal error: your_lib.h: No such file or directory
این ارور، ارور لینکر هستش و معنیش اینه که فقط فایل main.c به تنهایی کامپایل شده و بهمین دلیل در مرحله لینک شدن این مشکل پیش اومده. با فرض اینکه از gcc استفاده میکنید انگار چنین دستوری اجرا شده باشه:
gcc main.c -o output
در صورتی که باید اون فایل c که شامل تعریف (definition) توابع تون هست هم کامپایل بشه؛ یعنی به این صورت:
gcc main.c your_lib.c -o output
در این زمینه با vscode کار نکردم و آشنایی ندارم اما یه سرچ کلی کردم به نظر میاد در یک سری فایل json که مربوط به پروژه میشه باید اسم فایلهای c درج شده باشه که احتمالا پلاگینی برای انجام خودکار این کار وجود داره. پیشنهاد میکنم عبارت multi-file c/c++ project vscode رو سرچ کنید.
ممنون استاد
اتفاقا به همین تنظیمات json برخورد کرم اما چون رشتم برنامه نویسی نبوده اطلاعات ضعیفی در اینخصوص دارم و همون اضافه کردن آدرسی که توی کامنت اول گفتم رو توی یکی از همین فایل های json اضافه کردم اما نتیجه نگرفتم.
ممنون بابت معرفی کلمات لازم جهت سرچ کردن حتما انجامش میدم ببینم چی میشه
برنامه مشکلی ندارد.
در پوشه پروژه دستور زیر را اجرا کنید.
کامپایل
gcc *.c -o barname
اجرا
$ ./barname
//---side1
test in main is OK...
8.000000
8.000000
//---side2
test include external lib is OK...
8.000000
8.000000
اینکه test.c اجرا نمیشود درست است و نباید هم اجرا شود چون ()main ندارد.
هر برنامهٔ نوشته شده به زبان C یک تابع منحصربفرد به نام ()main دارد که اجرای برنامه را شروع میکند.
برنامهها در فایلهایی با پسوند c. به نام source نوشته میشوند در این نمونه دو source دارید
main.c
test.c
سرآیندها (Header) معمولا در ابتدای کد قرار میگیرند و کتابخانههایی که برای اجرای آن فایل لازم است را اضافه میکنند. از این فایلها در مرحله پیوند استفاده خواهد شد.
برنامه C برای تبدیل شدن به فایل اجرایی نیاز به کامپایل دارد.
به طور خلاصه و نادقیق در فرایند تبدیل فایل c. به برنامه اجرایی دو مرحله اصلی داریم
۱. تولید کد میانی object code
۲. پیوند زدن قسمتها به هم link
بسته gcc شامل تمام ابزارهای لازم برای اینکار هست.
apt install gcc
gcc میتواند این مراحل را با هم ترکیب کند و اغلب نیازی به اجرای گام به گام ندارید.
دستور زیر را در نظر داشته باشید.
gcc main.c test.c -o barname
دو فایل main.c و test.c را کامپایل کردیم و در خروجی یک فایل اجرایی با نام barname ساخته شده است که با barname/. میتوانیم آن را اجرا کنیم.
در واقع اینجا gcc مرحله تولید object code و پیوند زدن را با هم انجام داده است.
شما به همین نیاز خواهید داشت.
یک تغییرات مختصری هم در فایلها دادم. پیوست اول را ببینید.
برای اینکه مجبور نباشید هر بار مرحله کامپایل را دستی تکرار کنید میتوانید از build systemها استفاده کنید برای نمونه make.
در پروژههای بزرگتر فایلها را در پوشههای جداگانه قرار میدهند.
برای این مثال چینش فایلها به این شکل انجام دادم
$ tree
.
├── headers
│ └── test.h
├── Makefile
└── src
├── main.c
└── test.c
با افزودن makefile از این پس برای کامپایل و ساخت فایل اجرایی کافی است تنها دستور make را اجرا کنید.
پیوست دوم، پروژه به همراه استفاده از make است.
پس از اجرای دستور make پوشهای به نام bin حاوی فایل اجرایی ساخته خواهد شد.
اجرا
bin/barname
مرتبط
https://cs.colby.edu/maxwell/courses/tutorials/maketutor
https://gist.github.com/maciejjo/4ee74f6603f4a4497093
ابتدا روند کار را بیاموزید سپس به تنظیمات محیط توسعه با توجه به نیازها بپردازید.
برنامه مشکلی ندارد.
در پوشه پروژه دستور زیر را اجرا کنید.
کامپایل
gcc *.c -o barname
اجرا
$ ./barname
//---side1
test in main is OK...
8.000000
8.000000
//---side2
test include external lib is OK...
8.000000
8.000000
اینکه test.c اجرا نمیشود درست است و نباید هم اجرا شود چون ()main ندارد.
هر برنامهٔ نوشته شده به زبان C یک تابع منحصربفرد به نام ()main دارد که اجرای برنامه را شروع میکند.
برنامهها در فایلهایی با پسوند c. به نام source نوشته میشوند در این نمونه دو source دارید
main.c
test.c
سرآیندها (Header) معمولا در ابتدای کد قرار میگیرند و کتابخانههایی که برای اجرای آن فایل لازم است را اضافه میکنند. از این فایلها در مرحله پیوند استفاده خواهد شد.
برنامه C برای تبدیل شدن به فایل اجرایی نیاز به کامپایل دارد.
به طور خلاصه و نادقیق در فرایند تبدیل فایل c. به برنامه اجرایی دو مرحله اصلی داریم
۱. تولید کد میانی object code
۲. پیوند زدن قسمتها به هم link
بسته gcc شامل تمام ابزارهای لازم برای اینکار هست.
apt install gcc
gcc میتواند این مراحل را با هم ترکیب کند و اغلب نیازی به اجرای گام به گام ندارید.
دستور زیر را در نظر داشته باشید.
gcc main.c test.c -o barname
دو فایل main.c و test.c را کامپایل کردیم و در خروجی یک فایل اجرایی با نام barname ساخته شده است که با barname/. میتوانیم آن را اجرا کنیم.
در واقع اینجا gcc مرحله تولید object code و پیوند زدن را با هم انجام داده است.
شما به همین نیاز خواهید داشت.
یک تغییرات مختصری هم در فایلها دادم. پیوست اول را ببینید.
برای اینکه مجبور نباشید هر بار مرحله کامپایل را دستی تکرار کنید میتوانید از build systemها استفاده کنید برای نمونه make.
در پروژههای بزرگتر فایلها را در پوشههای جداگانه قرار میدهند.
برای این مثال چینش فایلها به این شکل انجام دادم
$ tree
.
├── headers
│ └── test.h
├── Makefile
└── src
├── main.c
└── test.c
با افزودن makefile از این پس برای کامپایل و ساخت فایل اجرایی کافی است تنها دستور make را اجرا کنید.
پیوست دوم، پروژه به همراه استفاده از make است.
پس از اجرای دستور make پوشهای به نام bin حاوی فایل اجرایی ساخته خواهد شد.
اجرا
bin/barname
مرتبط
https://cs.colby.edu/maxwell/courses/tutorials/maketutor
https://gist.github.com/maciejjo/4ee74f6603f4a4497093
ابتدا روند کار را بیاموزید سپس به تنظیمات محیط توسعه با توجه به نیازها بپردازید.
نمودونم چندبار خوندم تا کامل متجه بشم چی به چیه!!!
هر دو روش رو تست کردم و جواب داد
بسیار متشکرم عالی و خیلی نکته داشت
درمورد فایل makefile کتاب یا سندی دارید برای مطالعه، میخوام یاد بگیرم فردا روز برای پروژه دیگه ای قصد استفاده داشته باشم بتونم تنظیماتش رو انجام بدم
برای vsCode راهی هست که مثل نرم افزارهایی همچون visual studio , codeBlocks, keil, iar, bascom, codevision, eclipse و... پروژه رو نوشت و تمام عملیات لینک کردن و غیره رو خود vscode انجام بده؟
چون الان با شیوه ای که شما بیان کردید برنامه بدرستی راه میفته اما برای دیباگ کردن همون خطاهای سابق سرجاش مونده و نمیتونم از قابلیت دیباگ کردن برای برنامه ای که از کتابخونه های دستی استفاده میکنه ، استفاده کنم.(اما دیباگ کردنش برای برنامه ای که تنها از یک فایل حاوی main استفاده میکنه مشکلی نداره و کار میکنه.)
برای آشنایی بیشتر با make همین لینکها مناسب هستند.
کم کم شروع کنید و هر نمونه را یاد بگیرید.
مرتبط
https://cs.colby.edu/maxwell/courses/tutorials/maketutor
https://gist.github.com/maciejjo/4ee74f6603f4a4497093
فکر نمیکنم نیازی به کتاب داشته باشید برای پروژههایی که انجام میدهید فهمیدن همین مقدار کافی است.
در مورد تنظیمات vscode باید فایل task.json را طوری تنظیم کنید که از make استفاده کند.
برای شروع اینجا (https://code.visualstudio.com/docs/cpp/config-linux) را ببینید و پروژهای را گفته گام به گام بسازید.
vscode نرمافزار آزاد نیست میتوانید به جای آن از vscodium استفاده کنید.
https://vscodium.com
ویرایش
مقاله فارسی زیر هم برای آشنایی با make خوب است
https://www.irantux.org/html/index.php?name=Sections&req=viewarticle&artid=211&page=1
نویسنده: آیدین غریب نواز
برای آشنایی بیشتر با make همین لینکها مناسب هستند.
کم کم شروع کنید و هر نمونه را یاد بگیرید.
مرتبط
https://cs.colby.edu/maxwell/courses/tutorials/maketutor
https://gist.github.com/maciejjo/4ee74f6603f4a4497093
فکر نمیکنم نیازی به کتاب داشته باشید برای پروژههایی که انجام میدهید فهمیدن همین مقدار کافی است.
در مورد تنظیمات vscode باید فایل task.json را طوری تنظیم کنید که از make استفاده کند.
برای شروع اینجا (https://code.visualstudio.com/docs/cpp/config-linux) را ببینید و پروژهای را گفته گام به گام بسازید.
vscode نرمافزار آزاد نیست میتوانید به جای آن از vscodium استفاده کنید.
https://vscodium.com
ویرایش
مقاله فارسی زیر هم برای آشنایی با make خوب است
https://www.irantux.org/html/index.php?name=Sections&req=viewarticle&artid=211&page=1
نویسنده: آیدین غریب نواز
ممنون استاد راهنمایی های شما و دوستان عالیی بود
من نمیدونم چرا اصرار دارید از vs code استفاده کنید ولی codeblocks هم امکانات فوق العاده بیشتر و قوی تری برای برنامه نویسی C داره و هم خیلی از این مشکلاتی که اینجا بهش خوردید رو بهش برنمیخورید. تنظیمات کامپایلر و لینکر و کامپایل کردن و خیلی از بخش های دیگش رو راحت میتونید انجام بدید
متشکر
چون فقط از c استفاده نمیکنم، البته codeBlocks برای فقط c به مراتب خوش دست تر هستش (بنده eclipse رو به codeBlocks ترجیح میدم صرفا چون eclipse برای زبانهای دیگه هم به یک شکل ثابت داره نرم افزار تولید میکنه که با یادگیری یکیشون میتونید برای زبان های دیگه هم از یک محیط شناخته شده استفاده کنید. در کل در قید و بند یک نرم افزار خاص نیستم هر کدوم ابزار بهتری باشه از اون استفاده میکنم)
یه سری از هنرجوهام،تو کلاس از vscode استفاده میکردن، اونقدر داغون بود و اشتباه کار میکرد که همه مجبور شدن برن رو چیزهای دیگه.
توی این مدت که با vsCode دارم کار میکنم چیزای عجیب زیاد دیدم مثلا با زدن دکمه ctrl+c بجای کپی کردن وارد insert میشد!
و خیلی چیزای دیگه که با بررسی و سوال و جواب و کمک بقیه تا جایی که بنده فهمیدم مشکل از vsCode نیست بلکه موقع نصب بعضی از extension ها یکسری تغییرات توی vscode بوجود میاد که باید خودتون اینهارو در صورت عدم نیاز تغییر بدین مثل همون مشکل دکمه ctrl+c که با غیر فعال کردن تنظیمات یک extension درست شد و کپی میکرد.
بنظرم هنرجو ها از این موضوع بی اطلاع بودن
اما ماکروسافت این vsCode رو بقدری شلوغ کرده که گاهی اوقات یک text editor ساده رو ترجیح میدم.