PDA

View Full Version : حرفه ای: چه طور می تونم برنامه ای بنویسم که از یک کامپایلر استفاده کنه ؟؟؟



seyed saeed
سه شنبه 18 تیر 1398, 16:37 عصر
سلام
می خواهم برنامه ای بنویسم که یک محیط برنامه نویسی داشته باشه و بعد از آن کامپایل بشه
چه طور می تونم از یک کامپایلر آماده برای اینکار استفاده کنم مثل GCC
یا اینکه اصلا چه طور می تونم یک کامپایلر استاندارد خودم بنویسم
این دو تا کار کدومشون شدنیست و چه طور ؟؟؟

farhad_shiri_ex
سه شنبه 18 تیر 1398, 17:01 عصر
می خواهم برنامه ای بنویسم که یک محیط برنامه نویسی داشته باشه و بعد از آن کامپایل بشه
چه طور می تونم از یک کامپایلر آماده برای اینکار استفاده کنم مثل GCC

اگر منظورتون این هست که می خواهید یک محیط توسعه درست کنید برای زبان برنامه نویسی هایی که کامپایلر GCC پشتیبانی میکنه!
خوب هرچند که کار یکنفر نیست ولی شدنی بعد از اینکه محیط توسعه خودتون را آماده کردید برای کامپایل و لینک و ... با استفاده از دستورات خود کامپایلر GCC میتوانید برنامه را کامپایل کنید بهتره به برنامه هایی مثل Make یک نگاه بندازید



یا اینکه اصلا چه طور می تونم یک کامپایلر استاندارد خودم بنویسم

اینم که فرمودید آروزی خیلی هاست، قبلا خیلی بحث شده! البته من شرایط شما را نمیدونم ولی اگر به در جه ای از دانش در علوم مختلف کامپیوتر دست پیدا کرده باشید قطعا می تونید کامپایلر هم بنویسید که این هم یعنی حداقل از 30 سال گذشته تا الان با تمام پیشرفت های حوزه کامپیوتر آشنا باشید و خیلی موارد دیگر....

seyed saeed
سه شنبه 18 تیر 1398, 17:18 عصر
اگر منظورتون این هست که می خواهید یک محیط توسعه درست کنید برای زبان برنامه نویسی هایی که کامپایلر GCC پشتیبانی میکنه!
خوب هرچند که کار یکنفر نیست ولی شدنی بعد از اینکه محیط توسعه خودتون را آماده کردید برای کامپایل و لینک و ... با استفاده از دستورات خود کامپایلر GCC میتوانید برنامه را کامپایل کنید بهتره به برنامه هایی مثل Make یک نگاه بندازید

اینم که فرمودید آروزی خیلی هاست، قبلا خیلی بحث شده! البته من شرایط شما را نمیدونم ولی اگر به در جه ای از دانش در علوم مختلف کامپیوتر دست پیدا کرده باشید قطعا می تونید کامپایلر هم بنویسید که این هم یعنی حداقل از 30 سال گذشته تا الان با تمام پیشرفت های حوزه کامپیوتر آشنا باشید و خیلی موارد دیگر....

سلام ممنون از پاسختون
خب برنامه ای که گفتید نمی دونم چی هست
و کلا همین قسمت که چه طور از GCC بتونم استفاده کنم رو توش موندم
و قرار نیست محیط توسعه خیلی پیچیده باشه در حد برنامه های خیلی ساده
فرض کنید می خواهم با windows form این محیط رو بسازم حالا مثلا برنامه را کاربر نوشته و سینتکس ها چک شده
حالا چه طوری باید با GCC ارتباط بگیرم و برنامه بهش بدم برای کامپایل ؟؟؟؟
این بخش خیلی مهم هست

farhad_shiri_ex
سه شنبه 18 تیر 1398, 19:24 عصر
فرض کنید می خواهم با windows form این محیط رو بسازم حالا مثلا برنامه را کاربر نوشته و سینتکس ها چک شده
حالا چه طوری باید با GCC ارتباط بگیرم و برنامه بهش بدم برای کامپایل ؟؟؟؟

عرض کردم که کامپایلر GCC یکسری دستورات را به صورت خط فرمان دریافت میکنه کافی که مستندات خود کامپایلر را مطالعه کنید! یعنی برنامه هایی که در ادیتور خودتون نوشتید را در فایلهایی که ذخیره کردید به عنوان پارامترهای ورودی میدید به کامپایلر اونهم که آبجکت فایل و لینک و ELF و خروجی باینری را براتون تولید میکنه
برای همین عرض کردم که برنامه های مدیریت کامپایلی مثل Make , Cmake ,QMake را مطالعه کنید متوجه میشید که باید با چه ساختاری ورودی های کامپایلر را وارد کنید.

pe32_64
چهارشنبه 19 تیر 1398, 00:24 صبح
کاری که میخواید انجام بدید با LLVM قابل انجام هستش.
اما همون طور که دوستان گفتند به هبچ وجه کار ساده ای نیست !

seyed saeed
چهارشنبه 19 تیر 1398, 08:31 صبح
کاری که میخواید انجام بدید با LLVM قابل انجام هستش.
اما همون طور که دوستان گفتند به هبچ وجه کار ساده ای نیست !

یه مرحله میام عقب تر خب می دونیم که تابع main یک سری پارامتر داره به عنوان ورودی تابع
که می تونیم با CMD وقتی برنامه رو فراخوانی می کنیم این پارامترهارو هم مقدار دهی کنیم
حالا این کار رو میشه توسط برنامه دیگه ای که خودمون نوشتیم انجام بدیم
یعنی برنامه دیگه ای بنویسیم که برنامه دیگه ای رو فراخوانی کنه و پارامترهاشو بهش بده
من تصورم بر این است که از کامپایلر GCC به این شکل استفاده میشه
البته من تجربیاتم برنامه نویسیم بیش تر در حوزه الکترونیک هست و در کامپیوتر تجربه حرفه ای این شکلی ندارم
اگر سرنخ بهتری داشته باشم شاید راحت تر بتونم بفهمم
می دونم که از طریق CMD هم میشه با GCC ارتباط داشت و همه کارهایی که می خواهیم را می توانیم انجام بدهیم
ولی قرار نیست در IDE ما CMD را راه اندازی کنیم

seyed saeed
چهارشنبه 19 تیر 1398, 15:33 عصر
تونستم بلاخره یه برنامه بنویسم که میاد CMD رو راه اندازی می کنه و از طریق اون متصل میشه به کامپایلر و بعد برنامه ای که بهش آدرس دادم رو کامپایل می کنه
string path = @"cd /d E:\SAEED\amuzesh\C#\WPF PROJECT\MyIDE\MinGW\bin";
string arguments = "g++ -o test test.cpp";
Process myProcess = new Process();
//{
//ProcessStartInfo info = new ProcessStartInfo(path);
myProcess.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.UseShellExecute = false;
//myProcess.Start();
try { myProcess.Start(); }
catch (Exception ex)
{
textBox.Text=ex.ToString();
return;
}

StreamWriter myStreamWriter = myProcess.StandardInput;
myStreamWriter.WriteLine(path);
myStreamWriter.WriteLine(arguments);
myStreamWriter.Close();
myProcess.WaitForExit();
Console.ReadLine();

farhad_shiri_ex
چهارشنبه 19 تیر 1398, 17:44 عصر
تونستم بلاخره یه برنامه بنویسم که میاد CMD رو راه اندازی می کنه و از طریق اون متصل میشه به کامپایلر و بعد برنامه ای که بهش آدرس دادم رو کامپایل می کنه
string path = @"cd /d E:\SAEED\amuzesh\C#‎\WPF PROJECT\MyIDE\MinGW\bin";
string arguments = "g++ -o test test.cpp";
Process myProcess = new Process();
//{
//ProcessStartInfo info = new ProcessStartInfo(path);
myProcess.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.UseShellExecute = false;
//myProcess.Start();
try { myProcess.Start(); }
catch (Exception ex)
{
textBox.Text=ex.ToString();
return;
}

StreamWriter myStreamWriter = myProcess.StandardInput;
myStreamWriter.WriteLine(path);
myStreamWriter.WriteLine(arguments);
myStreamWriter.Close();
myProcess.WaitForExit();
Console.ReadLine();

خیلی هم خوب موفق باشید!
شما که می خواستید با سی شارپ بنویسید چرا تو تالار ++C پست ارسال کردید؟
حالا که از کلاس process استفاده میکنید بهتر بود که در متد waitForExit یک زمان مشخص تعریف کنید که تا نخ اصلی برنامه freeze نشه!

pe32_64
چهارشنبه 19 تیر 1398, 23:24 عصر
یه مرحله میام عقب تر خب می دونیم که تابع main یک سری پارامتر داره به عنوان ورودی تابع
که می تونیم با CMD وقتی برنامه رو فراخوانی می کنیم این پارامترهارو هم مقدار دهی کنیم
حالا این کار رو میشه توسط برنامه دیگه ای که خودمون نوشتیم انجام بدیم
یعنی برنامه دیگه ای بنویسیم که برنامه دیگه ای رو فراخوانی کنه و پارامترهاشو بهش بده
من تصورم بر این است که از کامپایلر GCC به این شکل استفاده میشه
البته من تجربیاتم برنامه نویسیم بیش تر در حوزه الکترونیک هست و در کامپیوتر تجربه حرفه ای این شکلی ندارم
اگر سرنخ بهتری داشته باشم شاید راحت تر بتونم بفهمم
می دونم که از طریق CMD هم میشه با GCC ارتباط داشت و همه کارهایی که می خواهیم را می توانیم انجام بدهیم
ولی قرار نیست در IDE ما CMD را راه اندازی کنیم
پس شما کلا سوال اشتباهی رو پرسیدین و جواب ها رو منحرف کردید .
سوال شما باید در مورد روش اجرای برنامه های دیگر در ویندوز میبود/که جوابی ساده تر و البته متفاوت از این تاپیک داره .

seyed saeed
شنبه 22 تیر 1398, 09:10 صبح
خیلی هم خوب موفق باشید!
شما که می خواستید با سی شارپ بنویسید چرا تو تالار ++C پست ارسال کردید؟
حالا که از کلاس process استفاده میکنید بهتر بود که در متد waitForExit یک زمان مشخص تعریف کنید که تا نخ اصلی برنامه freeze نشه!
در مورد این که چرا با سی شارپ نوشتم و در این کانال مطرح کردم
مسئله من نوع برنامه نویسی نبود مسئله من در مورد چگونگیش بود و فکر می کنم چون سی پلاس پلاس مطرح بود و کامپایلرهاش هم موجود بود و به راحتی در دست بود
این جا مطرح کردم پس صرف نظر کنیم از زبان برنامه نویسی
حالا به نظرتون چه طور می تونم با خود کامپایلر ارتباط مستقیم داشته باشم
همین طور که می بینید الان من اومدم CMD رو واسط قرار دادم و بهش گفتم خواهش می کنم برو به فلانی بگو کار من رو راه بندازه
در صورتی که فکر نکنم برنامه ها و IDE های دیگه این طور کار کنند
و اینکه خیلی از دستوراتی که توی برنامه هست اصلا نمی دونم به چه درد می خورند و بخش هاییش کپی کارهای دیگه است