プラットフォーム固有のコードを条件付きでコンパイルした後に、リンクエラーが発生しました(multiple definition
)。CMakeでリンクエラーを取得する
私のプロジェクトは、このようにレイアウトされています。私は、オペレーティングシステムを検出し、定義するためにCMakeのでイントロスペクションを設定
#if defined(LIBRARY_PLATFORM_LINUX)
#include "native/impl.linux.c"
#elsif defined(LIBRARY_PLATFORM_WIN32)
#include "native/impl.win32.c"
#endif
:general.c
ファイルの先頭に
/
|__+ include/
| |__+ native/
| | |__ impl.h
| |
| |__ general.h
|
|__+ src/
|__+ native/
| |__ impl.linux.c
| |__ impl.win32.c
|
|__ general.c
対応する定数。これが問題を引き起こしているもので、どうやら
file(GLOB_RECURSE LIBRARY_SOURCE_FILES "${PROJECT_SOURCE_DIR}/src/*.c")
:事は、私はすべてのディレクトリに1つのCMakeLists.txt
ファイルを維持したくなかったので、私は単純にすべての.c
ファイルas suggested in this answerをグロビングされています。コード#include
dをgeneral.c
にコンパイルしているように見え、個々のファイルはsrc/native/impl.*.c
です。
CMakeFiles/lib.dir/src/native/impl.linux.c.o: In function `declared_in_impl_h':
impl.linux.c:(.text+0x0): multiple definition of `declared_in_impl_h'
CMakeFiles/lib.dir/src/general.c.o:general.c:(.text+0x0): first defined here
この状況をどのように解消できますか?
'impl。*'ファイルに異なる拡張子を使用してください。 –