[Rd] suppressing "global" cppflags in an individual package

Simon Urbanek simon.urbanek at r-project.org
Thu May 11 09:21:59 CEST 2006


On May 11, 2006, at 12:37 AM, Kasper Daniel Hansen wrote:

> Thank you Simon, a little comment below
> On May 9, 2006, at 2:49 PM, Simon Urbanek wrote:
>> On May 9, 2006, at 1:11 PM, Kasper Daniel Hansen wrote:
>>> It is indeed the case that after updating to GCC 4 the package  
>>> gets  broken using -O2. I agree this needs to be fixed, but the  
>>> error
>>> [...]
>>> unfortunately), but reading your comment about CPPFLAGS and  
>>> CXXFLAGS makes me think I can indeed override it using the  
>>> package Makevars file. The flags I was passing to the compiler  
>>> were library locations anyway which was for the preprocessor.
>> AFAIR you cannot override CPPFLAGS/CXXFLAGS in Makevars, because  
>> it gets included first. You can, however, use something like this:
>> all: $(SHLIB)
>> %.o: %.c
>>         $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) $(MYCFLAGS) -c $< -o $@
>> for C, or for C++ accordingly:
>> %.o: %.cc
>>         $(CXX) $(ALL_CPPFLAGS) $(ALL_CXXFLAGS) $(MYCXXFLAGS) -c $<  
>> -o $@
> Actually you do not need the all: line, and since I use .cpp as C++  
> extension, all I needed was
> %.o: %.cpp
> <TAB>$(CXX) $(ALL_CPPFLAGS) -O0 -c $< -o $@

If it worked for you, fine ... but it doesn't for me (using plain  
SHLIB), because you're replacing the first target, the .so doesn't  
get built.

> Note that I needed to delete the $(ALL_CXXFLAGS) which basically  
> reads R's flags.

Well actually the point was that you *don't* need to do that and you  
should not. Most compilers (including gcc) ignore preceding  
conflicting flags, so -O3 -O0 will give you simply -O0 and that's  
what you wanted.

> Now, is there any way to (in the Makevars file) operate on $ 
> (ALL_CXXFLAGS), since all I want is to delete any -O* flag? Or is  
> defining rules and variables all I can do?

Yes. Again, I'm talking GNU make now, so I suspect this is not  
portable (so kids, don't do this at home), but you should be able to use

MYCXXFLAGS=$(filter-out -O3,$(ALL_CXXFLAGS))

However as stated above I don't think you want to do that - just  
append -O0 and you're safe.


More information about the R-devel mailing list