2016-04-27 53 views
0

で作業中のプロジェクトを実行したいと思います。CLION
メイクファイルcmakeをエミュレートしようとしていましたが、あまりよくありません。プロジェクトが通常のMakefileと一緒に作業しているので、エラーがcmakeの内部にあると確信しています。残念ながら、私はプロジェクトに関する多くの情報を表示することはできません。私はあなたの助けを受けるのに十分であることを私が示してくれることを願っています。CLion - cmake定義されていない参照

(ファイルを示すせずに)プロジェクトのディレクトリ構造は以下に示されている:

. 
├── CMakeLists.txt 
├── makefile 
├── include 
│ ├── data 
│ ├── io 
│ ├── learning 
│ ├── metric 
│ ├── scoring 
│ └── io 
└── src 
    ├── data 
    ├── io 
    ├── learning 
    ├── metric 
    ├── scoring 
    ├── utils 
    └── main.cc 

./CMakeLists.txt

cmake_minimum_required(VERSION 3.3) 
project(Project) 
set(DCMAKE_CXX_COMPILER "g++-5") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
find_package(Boost 1.57.0 COMPONENTS program_options system filesystem REQUIRED) 
find_package(OpenMP) 
if (OPENMP_FOUND) 
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
endif() 
include_directories(${Boost_INCLUDE_DIRS}) 
include_directories("include") 
include_directories("src") 
add_executable(Project src/main.cc) 
target_link_libraries(Project ${Boost_LIBRARIES}) 

プロジェクトがエラーなしでコンパイルしますが、中に失敗しますリンク。エラーの
部分は、以下に報告されています

[ 50%] Linking CXX executable Project 
CMakeFiles/Project.dir/src/main.cc.o: in function "metric::ir::ir_metric_factory(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int)": 
./include/metric/metricfactory.h:47: undefined reference to "metric::ir::Dcg::NAME_[abi:cxx11]" 
./include/metric/metricfactory.h:49: undefined reference to "metric::ir::Ndcg::NAME_[abi:cxx11]" 
./include/metric/metricfactory.h:51: undefined reference to "metric::ir::Tndcg::NAME_[abi:cxx11]" 
./include/metric/metricfactory.h:53: undefined reference to "metric::ir::Map::NAME_[abi:cxx11]" 
CMakeFiles/Project.dir/src/main.cc.o: in function "main": 
./src/main.cc:130: undefined reference to "learning::forests::LambdaMart::NAME_[abi:cxx11]" 
./src/main.cc:170: undefined reference to "learning::forests::Mart::NAME_[abi:cxx11]" 
./src/main.cc:171: undefined reference to "learning::forests::LambdaMart::NAME_[abi:cxx11]" 
./src/main.cc:172: undefined reference to "learning::forests::ObliviousMart::NAME_[abi:cxx11]" 
./src/main.cc:173: undefined reference to "learning::forests::ObliviousLambdaMart::NAME_[abi:cxx11]" 
./src/main.cc:174: undefined reference to "learning::linear::CoordinateAscent::NAME_[abi:cxx11]" 
./src/main.cc:175: undefined reference to "learning::forests::Project::NAME_[abi:cxx11]" 
./src/main.cc:176: undefined reference to "learning::CustomLTR::NAME_[abi:cxx11]" 
./src/main.cc:181: undefined reference to "metric::ir::Dcg::NAME_[abi:cxx11]" 
./src/main.cc:182: undefined reference to "metric::ir::Ndcg::NAME_[abi:cxx11]" 
./src/main.cc:183: undefined reference to "metric::ir::Tndcg::NAME_[abi:cxx11]" 
./src/main.cc:184: undefined reference to "metric::ir::Map::NAME_[abi:cxx11]" 
./src/main.cc:247: undefined reference to "metric::ir::Dcg::NAME_[abi:cxx11]" 
./src/main.cc:248: undefined reference to "metric::ir::Ndcg::NAME_[abi:cxx11]" 
./src/main.cc:249: undefined reference to "metric::ir::Tndcg::NAME_[abi:cxx11]" 
./src/main.cc:250: undefined reference to "metric::ir::Map::NAME_[abi:cxx11]" 
./src/main.cc:319: undefined reference to "learning::forests::LambdaMart::NAME_[abi:cxx11]" 
./src/main.cc:324: undefined reference to "learning::forests::Mart::NAME_[abi:cxx11]" 
./src/main.cc:329: undefined reference to "learning::forests::ObliviousMart::NAME_[abi:cxx11]" 
./src/main.cc:334: undefined reference to "learning::forests::ObliviousLambdaMart::NAME_[abi:cxx11]" 
./src/main.cc:339: undefined reference to "learning::linear::CoordinateAscent::NAME_[abi:cxx11]" 
./src/main.cc:346: undefined reference to "learning::linear::CoordinateAscent::CoordinateAscent(unsigned int, double, double, unsigned int, unsigned int)" 
./src/main.cc:347: undefined reference to "learning::forests::Project::NAME_[abi:cxx11]" 
./src/main.cc:351: undefined reference to "learning::CustomLTR::NAME_[abi:cxx11]" 
./src/main.cc:352: undefined reference to "learning::CustomLTR::CustomLTR()" 
(other errors lines) 
collect2: error: ld returned 1 exit status 
make[2]: *** [Project] Error 1 
make[1]: *** [CMakeFiles/Project.dir/all] Error 2 
make: *** [all] Error 2 
+1

関数 'learning ::' namespaceのように見えるのは 'src/learning'のどこかに実装されているので、これらのソースもコンパイルする必要があります。他の名前空間(例: 'metric ::')と同様です。 – Tsyvarev

+0

申し訳ありませんが、どうすればそれらをコンパイルできますか?あなたは、例を挙げてください。 – Draxent

+1

すべてのソースを 'add_executable()'コマンドの 'src/main.cc'の後ろに列挙してください。 – Tsyvarev

答えて

0

[OK]を、私は感謝Tsyvarevの助けにそれを解決します。
./CMakeLists.txt私が代わりにinclude_directories("src")のソースを追加するfile(GLOB_RECURSE SOURCES src/*.cc)を使用

cmake_minimum_required(VERSION 3.3) 
project(Project) 
set(DCMAKE_CXX_COMPILER "g++-5") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
find_package(Boost 1.57.0 COMPONENTS program_options system filesystem REQUIRED) 
find_package(OpenMP) 
if (OPENMP_FOUND) 
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
endif() 
include_directories(${Boost_INCLUDE_DIRS}) 
include_directories("include") 
file(GLOB_RECURSE SOURCES src/*.cc) #*/ 
add_executable(Project ${SOURCES}) 
target_link_libraries(Project ${Boost_LIBRARIES}) 

関連する問題