我目前正在尝试自学cmake,当我运行make时遇到错误,但是当我自己编译文件时程序运行得很好 . 在我的项目中,我有2个头文件声明类Card和DeckOfCards,2 .cpp文件定义我的类,以及.cpp驱动程序main.cpp .
我试过在线查看如何正确使用cmake,但我找不到很多 .
这是我在CMakeLists.txt中的内容......
cmake_minimum_required(VERSION 2.8.7)
project(Assignment_8)
add_library(card Card.h Card.cpp)
add_library(deckofcards DeckOfCards.h DeckOfCards.cpp)
add_executable(card_class_driver main.cpp)
target_link_libraries(card_class_driver card)
target_link_libraries(card_class_driver deckofcards)
在'target_link_libraries'上,如果你愿意,我也尝试了一个'声明',并得到相同的错误,就像这样..
target_link_libraries(card_class_driver card deckofcards)
我有一个名为'assignment_8'的目录中的源文件,以及一个子目录/ build目录'_build'...我读过的方式,并且一直在尝试它,在子目录'_build'我一直在运行“ cmake ..“......那里的一切都很好..它说它检测到了一切......但是当我运行'make'时,我得到了这些错误......
Scanning dependencies of target card
[ 33%] Building CXX object CMakeFiles/card.dir/Card.cpp.o
Linking CXX static library libcard.a
[ 33%] Built target card
Scanning dependencies of target deckofcards
[ 66%] Building CXX object CMakeFiles/deckofcards.dir/DeckOfCards.cpp.o
Linking CXX static library libdeckofcards.a
[ 66%] Built target deckofcards
Scanning dependencies of target card_class_driver
[100%] Building CXX object CMakeFiles/card_class_driver.dir/main.cpp.o
Linking CXX executable card_class_driver
libdeckofcards.a(DeckOfCards.cpp.o): In function `DeckOfCards::DeckOfCards()':
DeckOfCards.cpp:(.text+0x49): undefined reference to `Card::Card(int, int)'
libdeckofcards.a(DeckOfCards.cpp.o): In function `DeckOfCards::print_deck() const':
DeckOfCards.cpp:(.text+0x238): undefined reference to `Card::print_card() const'
collect2: error: ld returned 1 exit status
make[2]: *** [card_class_driver] Error 1
make[1]: *** [CMakeFiles/card_class_driver.dir/all] Error 2
make: *** [all] Error 2
任何帮助将不胜感激
1 回答
您的库之间似乎没有未提及的依赖关系 .
您的
deckofcards
库使用card
库中的内容 . 你需要告诉CMake,否则它将无法正确链接你的程序 . 正确的方法是将CMakeLists的最后两行更改为请注意,您不需要在最后一行再次指定
card
库 . 在这种情况下,CMake会自动解决传递依赖:由于deckofcards
依赖于card
,因此使用前者的所有内容也将与后者相关联 .