با سلام و عرض ادب و احترام خدمت تمامی اساتید و دوستان بزرگوارم.
#question
#سوال
خلاصه سوال :
چطور میشه داخل فایل Makeffile.am، کانفیگ مناسبی برای گرفتن module ها (چه کرنل چه pam) نوشت.
توضیحات کامل با کد:
اگر قرار بر نوشتن یک pam module باشه، طریقا compile کردنش به راحتی انجام میشه :
cc -fPIC -fno-stack-protector -c src/pam_test.c
sudo ld -x --shared -o /lib/security/pam_test.so pam_test.o
همین موضوع رو شاید بتونیم با Makefile ها، کمی تر تیمز تر حل کنیم :
MODULE_CC_FLAG=-fPIC -fno-stack-protector
MODULE_DIR=/lib/security
MODULE_NAME=pam_test.so
MODULE_FILENAME=$(MODULE_DIR)/$(MODULE_NAME)
MODULE_OUT=pam_test.o
modules: pam_test
pam_test:
$(CXX) $(MODULE_CC_FLAG) -c $(MODULE_SOURCE)
install:
ld -x --shared -o $(MODULE_FILENAME) $(MODULE_OUT)
rm -rf $(MODULE_OUT)
حالا کد غلطی که من در automake و فایل Makefile.am ام دارم (هیچ ایده ای برای غیر از این ندارم و دقیقا مشکلم همینه) به این صورت هست :
Makefile.am:
bin_PROGRAMS = pam_pass_test
pam_pass_test_SOURCES = src/pam_pass_test.c
AUTOMAKE_OPTIONS = subdir-objects
AM_CFLAGS = -fPIC -fno-stack-protector -lpam -lpam_misc
منطقا نباید خروجی درستی داشته باشه، اما دقیقا نمیدونم چطور باید مشخص کنم که چطور با ld ماژول رو بیلد بگیرم و اصلا به جای اون bin_PROGRAMS باید چی بزنم که بعد سر something_SOURCES به مشکل نخورم (تست کردم اگر از dot استفاده کنم به طبغ نمیتونم با dot اون نام رو تعریف کنم.).
ضمن این موضوع، چطور میتونم OUTPUT dir تعریف کنم.
شاید سوال، سوال درستی نباشه (چون قطعا جوابش داخل کتاب automake هست) اما الان وفت دندارم تمام کتابش رو بخونم.
سرچ کردم، به جواب خاصی نرسیدم (میتونه دلیلش عجله هم باشه.).
فعلا هم برای کار راه اندازی از این ساختار استفاده میکنم :
SUBDIRS = src
MODULE_NAME = pam_pass_test
MODULE_SOURCES_ = src/*.c
AM_CFLAGS = -fPIC -fno-stack-protector -lpam -lpam_misc
install:
mkdir -p bin
$(CC) $(AM_CFLAGS) $(MODULE_SOURCES_) -c
mv *.o bin
sudo ld -x --shared -o /lib/security/pam_pass_test.so ./bin/*.o
گرچه غلط هست.
از دوستانی که میخونن و جواب میدن/یا نمیدن شدیدا متشکرم 🙏🙏🙏
رشتهٔ گفتگو با سلام و عرض ادب و احترام خدمت تمامی اساتید و دوستان بزرگوارم.
9 پیام · –I ع A ع
I شما چرتتر از autotools بیلدسیستم پیدا نمیکنی :))) ولی ساختار autotools رو برای کارت باید بلد باشی چون خیلی از ابزارهای معروف که نسبتا یکم قدیمی هستن با autotools هندل میشن. اما cmake یک build system generator هست و میتونه بهت خروجیهایی که میخوای رو بده. (ولی سینتکس رو اعصابی داره) در کل خوبه یاد بگیریش.ع ع I