저는 약간의 컴파일러를 작성하고 있습니다 만, 이제는 모든 의존 객체 파일을 생성하지 않는 cmake로 막혔습니다.CMake는 의존 객체 파일을 생성하지 않습니다
은 main.cpp
는 컴파일 :
#include <iostream>
#include "lexer.h"
#include "parser.h"
int main() {
Lexer lexer(&std::cin);
Parser parser(&lexer);
parser.binaryOpPrecedence['<'] = 10;
parser.binaryOpPrecedence['+'] = 20;
parser.binaryOpPrecedence['-'] = 20;
parser.binaryOpPrecedence['*'] = 40;
std::cerr << "ready> ";
parser.getNextToken();
parser.parse();
return 0;
}
내 CMakeLists.txt
인 다음 (하위) :
main.cpp
하지
lexer.cpp
및
parser.cpp
때문에 링커를
main.cpp.o
로 컴파일되지만 말했다
set(SOURCE_FILES
${PROJECT_SOURCE_DIR}/src/ast/binary.h
${PROJECT_SOURCE_DIR}/src/ast/call.h
${PROJECT_SOURCE_DIR}/src/ast/expression.h
${PROJECT_SOURCE_DIR}/src/ast/function.h
${PROJECT_SOURCE_DIR}/src/ast/number.h
${PROJECT_SOURCE_DIR}/src/ast/prototype.h
${PROJECT_SOURCE_DIR}/src/ast/variable.h
${PROJECT_SOURCE_DIR}/src/lexer.cpp
${PROJECT_SOURCE_DIR}/src/parser.cpp
PARENT_SCOPE
)
add_executable(kaleidoscope main.cpp ${SOURCE_FILES})
해결되지 않은 기호로 충돌합니다. 모르겠다. 내가 잘못한 것을. O
내가 거기에 모든 소스 파일에 액세스 할 수 내 테스트 대상이 필요합니다
/usr/bin/cmake --build /home/patkar/.clion10/system/cmake/generated/d6bd25de/d6bd25de/Debug --target kaleidoscope -- -j 4
Scanning dependencies of target kaleidoscope
[100%] Building CXX object src/CMakeFiles/kaleidoscope.dir/main.cpp.o
Linking CXX executable kaleidoscope
CMakeFiles/kaleidoscope.dir/main.cpp.o: In function `Lexer':
/home/patkar/workspace/compiler-fun/kaleidoscope/src/lexer.h:49: undefined reference to `vtable for Lexer'
CMakeFiles/kaleidoscope.dir/main.cpp.o: In function `main':
/home/patkar/workspace/compiler-fun/kaleidoscope/src/main.cpp:36: undefined reference to `Parser::parse()'
CMakeFiles/kaleidoscope.dir/main.cpp.o: In function `~Lexer':
/home/patkar/workspace/compiler-fun/kaleidoscope/src/lexer.h:38: undefined reference to `vtable for Lexer'
/home/patkar/workspace/compiler-fun/kaleidoscope/src/lexer.h:38: undefined reference to `vtable for Lexer'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [src/kaleidoscope] Error 1
make[2]: *** [src/CMakeFiles/kaleidoscope.dir/all] Error 2
make[1]: *** [src/CMakeFiles/kaleidoscope.dir/rule] Error 2
make: *** [kaleidoscope] Error 2
'SOURCE_FILES'이 (가) 올바른 경로로 설정되어 있는지 확인 했습니까? –
테스트 타겟에서'SOURCE_FILES'를 사용하기 때문에 경로가 정확하지 않습니다. 그리고 그것입니다,'PARENT_SCOPE'는 현재 범위에서 변수를 접근 불가능/비게 했습니까? –
그래,이 같은 문제가 발생했습니다. 안타깝게도 [documentation] (http://www.cmake.org/cmake/help/v3.0/command/set.html)은이 동작에 대한 사양을 제공하지 않습니다. 상위 범위에서 설정하면 현재 범위에서도 액세스 할 수 있다고 생각할 것입니다. –