automake 将目标文件放在库之后
automake putting object files after libraries
src/Makefile.am
:
myproj_CXXFLAGS = -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I$(top_srcdir)/external
myproj_LDFLAGS = -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread
bin_PROGRAMS = myproj
myproj_SOURCES = gfa.cpp graph.cpp myproj.cpp gfa.h graph.h
bindir = $(top_srcdir)/bin
这可以很好地构建目标文件,但是在构建目标时,它会尝试 运行
g++ -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I../external -g -O2 -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread -o myproj myproj-gfa.o myproj-graph.o myproj-komb.o
这个问题是目标文件出现在库文件之后,这导致了错误
/home/software/miniconda3/lib/libz.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
我可以通过在最后添加 -lz -ligraph
标志轻松解决这个问题,但是我怎样才能让 automake 在目标文件之后而不是之前添加 LDFLAGS
?
那是因为你使用了错误的变量。要传递库,您应该使用 myproj_LDADD
,而不是 myproj_LDFLAGS
。
src/Makefile.am
:
myproj_CXXFLAGS = -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I$(top_srcdir)/external
myproj_LDFLAGS = -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread
bin_PROGRAMS = myproj
myproj_SOURCES = gfa.cpp graph.cpp myproj.cpp gfa.h graph.h
bindir = $(top_srcdir)/bin
这可以很好地构建目标文件,但是在构建目标时,它会尝试 运行
g++ -fopenmp -O3 -std=c++17 -g -I/home/software/miniconda3/include -I../external -g -O2 -L/home/software/miniconda3/lib -Wl,-rpath=/home/software/miniconda3/lib -fopenmp -lz -ligraph -pthread -o myproj myproj-gfa.o myproj-graph.o myproj-komb.o
这个问题是目标文件出现在库文件之后,这导致了错误
/home/software/miniconda3/lib/libz.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
我可以通过在最后添加 -lz -ligraph
标志轻松解决这个问题,但是我怎样才能让 automake 在目标文件之后而不是之前添加 LDFLAGS
?
那是因为你使用了错误的变量。要传递库,您应该使用 myproj_LDADD
,而不是 myproj_LDFLAGS
。