CMake 不生成依赖对象文件
CMake doesn't generate depend object files
我正在编写一个小编译器,但现在我坚持使用 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
如下(子目录):
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})
如前所述,只有main.cpp
被编译为main.cpp.o
而不是lexer.cpp
和parser.cpp
,因此链接器因未解析的符号而崩溃。不知道,我做错了什么。
/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
好的,正是PARENT_SCOPE
使我的SOURCE_FILES
变量在当前范围内无法访问/为空:O
我需要这个让我的测试目标访问那里的所有源文件。我现在创建了一个使用 PARENT_SCOPE
作为解决方法的新变量。
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
)
set(SOURCE_TEST_FILES ${SOURCE_FILES} PARENT_SCOPE)
add_executable(kaleidoscope main.cpp ${SOURCE_FILES})
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在h文件中包含.o对象文件
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 从对象文件(.o)在macos上制作归档文件(.a文件)
- 检测 COFF 对象文件中C++内联符号
- 特定对象文件的单线程生成
- 使用对象文件读取三角形数据网格
- 链接时,不同静态库中的同一对象文件
- 防止临时对象文件访问 MSVC 中的磁盘
- 对在不同二进制文件中创建的对象文件的依赖关系
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 使用 make 将对象文件放在特定目录中
- 如何从 3d 对象文件中获取 3d 坐标
- 为什么我的生成文件没有生成对象文件?
- 如何在OSX上正确创建C++对象文件(.o)
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- 使用nvcc(CUDA-RINSIDE)正确链接对象文件
- 链接节点本机模块中的提升库,对象文件需要替代库版本