libtoolを用いた共有ライブラリで、

automakeを用いた場合に
あるCソースのみにコンパイルオプションを指定する方法を教えてください。
(libtoolライブラリではないですが、実例としてMySQLのsql/sql_yacc.ccがあります)

ちなみに、正解に近いと思われるページ
http://sources.redhat.com/automake/automake.html#Per_002dObject-Flags
の手法を試したところ、
xxxxx_CFLAGSの設定がMakefileまで引き継がれないようでした。

回答の条件
  • 1人2回まで
  • 登録:2006/09/06 01:10:03
  • 終了:2006/09/13 01:10:03

回答(1件)

id:znz No.1

znz回答回数193ベストアンサー獲得回数252006/09/07 02:32:02

ポイント60pt

CFLAGSはソースファイルごとではなくライブラリなどのリンク後のターゲットごとのようなので、以下のように「``」を使って動的に判断するというのはどうでしょうか?

% cat Makefile.am
bin_PROGRAMS = hello
hello_SOURCES = main.c
hello_CFLAGS = -Wall
hello_LDADD = libhello.la

lib_LTLIBRARIES = libhello.la
libhello_la_SOURCES = hello.c hello_world.c
include_HEADERS = hello.h
libhello_la_CFLAGS = -Werror `[ hello_world.c = "$<" ] && echo -DNAME='"world"'`
#libhello_la_CFLAGS = -Werror -DNAME='"world"'
% cat configure.ac
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(hello, 1.0, [example@example.net])
AM_INIT_AUTOMAKE([foreign])
AC_CONFIG_SRCDIR([hello.c])
AM_CONFIG_HEADER([config.h])

# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL

# Checks for libraries.

# Checks for header files.

# Checks for typedefs, structures, and compiler characteristics.

# Checks for library functions.

AC_CONFIG_FILES([Makefile])
AC_OUTPUT
% cat hello.c
#include "hello.h"
#include <stdio.h>

#ifdef NAME
#error
#endif

void hello(const char *name)
{
    printf("Hello, %s.\n", name);
}
% cat hello.h
void hello(const char *name);
void hello_world(void);
% cat hello_world.c
#include "hello.h"
#include <stdio.h>

void hello_world(void)
{
    hello(NAME);
}
% cat main.c
#include "hello.h"

int
main(void)
{
    hello_world();
    return 0;
}
%

この内容で、autoreconf -i && ./configure && make && ./helloが実行できています。

libhello_la_CFLAGSのコメントアウトしている方を有効にすると、hello.cの#errorで止まって、libhello.laのソース全部にlibhello_la_CFLAGSがきいているのが確認できます。

id:tasukuchan

実例ありがとうございます!

なるほど``ですか、思いつきませんでした!

試してみます。

2006/09/07 11:15:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません