【发布时间】:2012-11-29 00:03:31
【问题描述】:
我一直在使用一个相当简单的生成文件。我用 .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_1.so 和 mylib_2.so,除了 mylib.so。每个 .so 都依赖于所有相同的 .cc 文件,但编译器标志都不同(包括包含目录)。
如何获取它以便可以根据目标 .so 设置编译器标志?我遇到的问题是,如果我多次设置 CXXFLAGS ,它就会被覆盖。这几乎就像我需要一个 if/else 情况。
我尝试设置三个不同的标志,$CXXFLAGS1、$CXXFLAGS2、$CXXFLAGS3,并使用行中的那些
$(mylib1.so): $OBJS
$CXX $(CXXFLAGS1) -shared -o $@ $^
但这不起作用。
我如何完成我想做的事情?有 3 个单独的 makefile 会更好吗?我确实找到了让它工作的方法。我可以停止使用 $OBJS 并为每个源文件明确地拼出标志,但这在缩放到大小方面似乎是一个可怕的想法。
【问题讨论】:
-
我应该注意到,在任何给定的构建中,只会创建三个 .so 中的一个。我不需要同时构建所有 3 个