我一直在使用一个相当简单的makefile。我用 .cc 文件列表定义了 OBJS。我设置了依赖项并包含标志并将所有这些附加到 $CXXFLAGS。它看起来像这样:
SRCS = file1.cc file2.cc file3.cc
OBJS = $(SRCS:.cc=.o)
CXXFLAGS=some flags
CXXFLAGS+=some include dirs
$(mylib.so): $OBJS
$CXX -shared -o $@ $^
mylib.so (隐式)使用 CXXFLAGS 并且一切都构建得很好。
除了 mylib.so 之外,我最近还需要 mylib_1.so 和 mylib_2.so。每个 .so 都依赖于所有相同的 .cc 文件,但编译器标志都不同(包括包含目录)。
如何获取它,以便我可以根据目标 .so 设置编译器标志?我遇到的问题是,如果我多次设置 CXXFLAGS ,它就会被覆盖。这几乎就像我需要一个 if/else 情况。
我尝试设置三个不同的标志,$CXXFLAGS1、$CXXFLAGS2、$CXXFLAGS3,并使用这些标志
$(mylib1.so): $OBJS
$CXX $(CXXFLAGS1) -shared -o $@ $^
但这不起作用。
我如何完成我想做的事情?有 3 个单独的 makefile 会更好吗?我确实找到了让它工作的方法。我可以停止使用 $OBJS 并为每个源文件明确地拼出标志,但这在缩放到大小方面似乎是一个可怕的想法。