前提・実現したいこと
Macのターミナル上でmakefileを用いてコンパイルしたい。
makefileと同じ階層に.cpp,.hファイルがあれば実行できたが、
.hファイルを別の階層に置くとよくわからないメッセージが出る。
ここに質問の内容を詳しく書いてください。
makefileの勉強をしていて、makefileとソースコードが別のディレクトリにあるときの書き方を勉強しています。
includeパスの記述を行っても変なエラーが出て全く読めません。
ディレクトリ構成は
です。
発生している問題・エラーメッセージ
MacBook-Pro:make_practice user$ make c++ -I./mylib -c -o main.o src/main.cpp c++ -I./mylib -c -o mylib.o src/mylib.cpp g++ -o hello main.o mylib.o Undefined symbols for architecture x86_64: "__ZNKSt3__16locale9use_facetERNS0_2idE", referenced from: __ZNSt3__1L9use_facetINS_5ctypeIcEEEERKT_RKNS_6localeE in mylib.o "__ZNKSt3__18ios_base6getlocEv", referenced from: __ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE5widenEc in mylib.o "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc", referenced from: __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Emc in mylib.o "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev", referenced from: __ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_ in mylib.o "__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc", referenced from: __ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_ in mylib.o "__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv", referenced from: __ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_ in mylib.o "__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_", referenced from: __ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in mylib.o "__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev", referenced from: __ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in mylib.o "__ZNSt3__14coutE", referenced from: __Z5hellov in mylib.o "__ZNSt3__15ctypeIcE2idE", referenced from: __ZNSt3__1L9use_facetINS_5ctypeIcEEEERKT_RKNS_6localeE in mylib.o "__ZNSt3__16localeD1Ev", referenced from: __ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE5widenEc in mylib.o "__ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv", referenced from: __ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m in mylib.o "__ZNSt3__18ios_base5clearEj", referenced from: __ZNSt3__18ios_base8setstateEj in mylib.o ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status make: *** [hello] Error 1
該当のソースコード
CC = g++
VPATH = src
CPPFLAGS = -I./mylib
objects = main.o mylib.o
headers = mylib.h
output = hello
$(output) : $(objects)
$(CC) -o $@ $?
%.o : %.cpp $(headers)
$(CC) -c -o $@ $<
.PHONY: clean
clean:
rm -f $(output) $(objects)
makefile
該当のソースコード
include "mylib.h"
int main(void)
{
hello();
return 0;
}
c++
該当のソースコード
include<iostream>
include"mylib.h"
int hello(void)
{
std::cout << "Hello" << std::endl;
return 0;
}
c++
該当のソースコード
ifndef MYLIB_H
define MYLIB_H
int hello(void);
endif
ヘッダー
試したこと
CPPFLAGSをCFLAGSに変えて書いたりしました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/09 11:25
2021/05/10 12:15 編集
2021/05/09 11:36
2021/05/09 11:40
2021/05/09 12:07 編集
2021/05/09 12:13
2021/05/09 12:15
2021/05/09 12:18
2021/05/09 12:36
2021/05/09 12:47
2021/05/10 11:22
2021/05/10 12:12
2021/05/10 20:58