[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Specifying Flag Order?
From: |
Jordan H. |
Subject: |
Re: Specifying Flag Order? |
Date: |
Thu, 23 May 2013 08:21:59 -0700 |
I think I'm getting close to understanding what's going on with
configure.ac and Makefile. Here's what I understand...
I used to think of them separately...that `./configure` just warns the
user of a library they're missing; now I'm realizing `./configure`
(generated from `configure.ac`, of course) can configure variable to be
used in Makefile, like this:
SOME_IF_MACRO( [ test_for_something ], [ TEST_VARIABLE =
something_if_true ], [ TEST_VARIABLE = something_else_if_false ] )
And then I can use that variable in my Makefile.am...
myprog_CPPFLAGS += $(TEST_VARIABLE) ...
Is that correct? I guess I'm mainly writing this to think out loud and
also to help anyone searching the nets for automake help.
On Thu 23 May 2013 07:24:04 AM PDT, Jordan H. wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA512
>
> Yes, I'll try that. Thank you.
> I'm still trying to get a hang of what all the macros and variables
> mean...I understand the basic syntax, at least.
> While we're on the topic, any resources out there to help someone get a
> handle on vars/macros? I see in the automake manual an entire index but
> it doesn't seem to be beginner-friendly.
> Thanks.
>
> Luke Mewburn:
>> On Wed, May 22, 2013 at 04:46:36PM -0700, Jordan H. wrote:
>> | I'm using mysql in a program. Here is a snipped of my Makefile.am:
>> |
>> | project_LDADD += -lboost_thread
>> | project_LDADD += -lboost_regex
>> | project_LDADD += -lboost_system
>> |
>> | AM_LDFLAGS = -L/usr/local/lib
>> | AM_LDFLAGS += `mysql_config --libs_r`
>> | AM_LDFLAGS += `mysql_config --include`
>> | AM_LDFLAGS += -std=c++0x
>> | AM_LDFLAGS += `mysql_config --cflags`
>> |
>> | When I compile the program, automake generated:
>> |
>> | g++ -g -O2 -L/usr/local/lib `mysql_config --libs_r` `mysql_config
>> | --include` -std=c++0x
>> | `mysql_config --cflags` -o /[ ... a bunch of .o files ... ]/
>> | -lboost_thread -lboost_regex
>> | -lboost_system
>> |
>> | As expected, since g++ needs linker flags at the end I get a bunch of
>> | compile errors saying the `mysql_*` functions don't exist. How do I
>> | specify for the linker flags to go at the end? I tried to put them in
>> | the project_LDADD macro but automake complained:
>> |
>> | Makefile.am:13: linker flags such as `--libs_r`' belong in
>> | `project_LDFLAGS
>> |
>> | Which got me back to square one. I must be doing something wrong. Any
>> | ideas? This has been bugging me for days. Thanks in advance.
>>
>> Hi Jordan,
>>
>> I define some automake substition variables in configure.ac as part
>> of the checks for MySQL:
>>
>> # Look for mysql via the presence of 'mysql_config' or 'mysql_config5'
>> #
>> AC_PATH_PROGS([TOOL_MYSQL_CONFIG], [mysql_config mysql_config5], [],
>> [$PATH:/opt/local/bin])
>> AS_IF([test -n "$TOOL_MYSQL_CONFIG"],
>> [MYSQL_CFLAGS=`$TOOL_MYSQL_CONFIG --cflags`
>> MYSQL_LIBS=`$TOOL_MYSQL_CONFIG --libs_r`
>> MYSQL_VERSION=`$TOOL_MYSQL_CONFIG --version`],
>> [AC_MSG_ERROR([missing program 'mysql_config'; is 'mysql' or
> 'MySQL-devel' installed?])])
>>
>> WANT_MYSQL_VERSION=5.1.55
>>
>> AC_MSG_CHECKING([for mysql >= $WANT_MYSQL_VERSION])
>> AS_VERSION_COMPARE([$MYSQL_VERSION], [$WANT_MYSQL_VERSION],
>> [AC_MSG_RESULT([no])
>> AC_MSG_FAILURE([mysql $MYSQL_VERSION is too old, need
> $WANT_MYSQL_VERSION])])
>> AC_MSG_RESULT([yes])
>>
>> AC_SUBST([MYSQL_CFLAGS])
>> AC_SUBST([MYSQL_LIBS])
>> AC_PATH_PROGS([TOOL_MYSQL], [mysql mysql5], [],
>> [$PATH:/opt/local/bin])
>> AS_IF([test -n "$TOOL_MYSQL"],
>> [:],
>> [AC_MSG_ERROR([missing program 'mysql'; is 'mysql' or
> 'MySQL-client-community' installed?])])
>>
>>
>> I then use these in the Makefile.am as:
>>
>> prog_CPPFLAGS += $(MYSQL_CFLAGS)
>> prog_LDADD += $(MYSQL_LIBS)
>>
>> (As an aside, you probably don't want includes and cflags in LDFLAGS)
>>
>> I don't bother with `mysql_config --include`
>>
>>
>> Feel free to reuse those snippets as you like.
>>
>>
>> I hope that's useful.
>>
>>
>> Regards,
>> Luke.
>
> -----BEGIN PGP SIGNATURE-----
>
> iQEcBAEBCgAGBQJRniZ3AAoJEOT99oqiSuRNgrAH/1125/APKJF1pDSLN/GCJoE/
> W9t9NvM/o1ZZxxPlKGjrznzvlZ1qg255Suq5ACWKzTPxYVpH4/tOvj+CNf43gYR1
> 43D+KB/sV3ozfkuPcGfS3Bd7zUDD7elenJJvCTwhynOhQbXG3U8LVnTCbwMEQVcP
> c7ovbTaBxaG5PQVesX1t3f/mbjdPA0RrjYofyzUTJ6EiojmuXZrbfkSN1loiszTz
> xGZEk0BODvlzlBy3/btI19NvdQVPV2D2HxHRlA2tHRi7LxoWmf/v2OCiGxYwVPXs
> AkW0KqAio2fEX/sdJqGHCq69grqwzPulQDsLaLtgJS4b0iD25UWdeoxR4UgkSU0=
> =KeN8
> -----END PGP SIGNATURE-----
>
>