人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: グニャラくん
●カテゴリ:コンピュータ
✍キーワード:CC Makefile MySQL SQL オプション
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● znz
●60ポイント

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がきいているのが確認できます。

◎質問者からの返答

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

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

試してみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ