当前位置: 技术问答>linux和unix
Linxu makefile小问题
来源: 互联网 发布时间:2016-12-18
本文导语: 我在编译一个程序时,用到了ICU4C这个库,所以用gcc编译时是这样的: gcc smssend.cpp -o sms -licuio 然后需要引进一个环境变量: export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 这样才能执行./sms 现在需要写一个makefile文...
我在编译一个程序时,用到了ICU4C这个库,所以用gcc编译时是这样的:
gcc smssend.cpp -o sms -licuio
然后需要引进一个环境变量:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
这样才能执行./sms
现在需要写一个makefile文件来执行,请问应该怎样写?
我之前没学过makefile文件的书写。
gcc smssend.cpp -o sms -licuio
然后需要引进一个环境变量:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
这样才能执行./sms
现在需要写一个makefile文件来执行,请问应该怎样写?
我之前没学过makefile文件的书写。
|
顶! LD_LIBRARY_PATH是loader程序用的,不是linker用的。ld程序其实linker,虽然它名字很像loader缩写,但man下ld可知:
------------------------------------------------------------------
LD(1) GNU Development Tools
NAME
ld - The GNU linker
SYNOPSIS
ld [options] objfile ...
|
google下如何写makefile。。。。很详细
|
在makefile里面export就行
export LD_LIBRARY_PATH=/usr/local/lib:$(LD_LIBRARY_PATH)
tar1:
gcc smssend.cpp -o sms -licuio
./sms
export LD_LIBRARY_PATH=/usr/local/lib:$(LD_LIBRARY_PATH)
tar1:
gcc smssend.cpp -o sms -licuio
./sms
|
Makefile: 如果你的icuio是放在/usr/lib /usr/local/lib 就没有必要写那个export ,默认ld会查找这些目录,如果是放在比如 /test/lib/下 可以这样写
sms:smssend.cpp
gcc smssend.cpp -o sms -licuio
CFLAGS += -L/test/lib
//你写在LD_FLAGS中也是可以的。
export 我建议你还是写在一个shell中, 比如 sms_exec.sh:
#!/usr/bin/env sh
export LD_LIBRARY_PATH=/test/lib:$(LD_LIBRARY_PATH)
sms
sms:smssend.cpp
gcc smssend.cpp -o sms -licuio
CFLAGS += -L/test/lib
//你写在LD_FLAGS中也是可以的。
export 我建议你还是写在一个shell中, 比如 sms_exec.sh:
#!/usr/bin/env sh
export LD_LIBRARY_PATH=/test/lib:$(LD_LIBRARY_PATH)
sms
|
编译的时候与那个环境变量无关吧,只是运行的时候需要
试试gcc smssend.cpp -o sms -L/usr/local/lib -licuio
试试gcc smssend.cpp -o sms -L/usr/local/lib -licuio
|
楼上和楼上的楼上是正解。环境变量和编译本身无关。只有在运行的时候,程序会根据LD_LIBRARY_PATH的路径寻找动态库文件。在编译阶段,与动态库文件相关的是-L选项,用于告诉编译器去这个目录下寻找库文件。
|
顶
|
shell脚本中的export 起作用吗?
|
1、如果你打算这个环境变量永远有效,那么,打开/etc/profile 加到最后,然后source profile,这样每次开机环境变量就设置好了。Makefile里面就不用再管他了。
2、我看你这个环境变量是一个库的目录,可以这样:
LIBDIR += -L/usr/local/lib
LIBDIR +=其他路径
LIB += -licuio
LIB += 其他库
sms:
gcc smssend.cpp -o sms $(LIBDIR) $(LIB)
2、我看你这个环境变量是一个库的目录,可以这样:
LIBDIR += -L/usr/local/lib
LIBDIR +=其他路径
LIB += -licuio
LIB += 其他库
sms:
gcc smssend.cpp -o sms $(LIBDIR) $(LIB)