CLion运行/调试配置中target与executable的区别是什么?

按下调试按钮后显示的构建日志如下:
====================[ Build | luajit | Debug ]================================== /Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build /Users/jack/CLionProjects/fluent-bit/build --target luajit -- -j 6 [100%] Built target luajit 构建完成 ====================[ Build | fluent-bit-bin | Debug ]========================== /Applications/CLion.app/Contents/bin/cmake/mac/bin/cmake --build /Users/jack/CLionProjects/fluent-bit/build --target fluent-bit-bin -- -j 6
CLion 运行/调试配置中 Target 与 Executable 的区别
两个选项分别对应「构建阶段」和「运行阶段」的配置,和你贴的构建日志逻辑完全匹配:
- Target(构建目标)
这是CMake层面定义的构建单元,你日志里先后构建的luajit、fluent-bit-bin都属于target。它没有类型限制,可以是可执行程序、静态/动态链接库、自定义构建脚本任务,甚至是用来批量触发多个子构建的虚拟目标。
配置这个选项的作用就是告诉CLion:点击运行/调试按钮前,要先执行哪个构建任务。CLion会自动处理这个target的完整依赖链——比如你选fluent-bit-bin作为target,它会自动先编译依赖的luajit库,再编译fluent-bit主程序,就是你日志里看到的先后构建顺序。
注意不是所有target都能直接运行,比如这里的luajit是依赖库,构建完只会生成.a/.dylib这类库文件,没法直接启动。 - Executable(可执行文件)
这是运行/调试阶段实际要拉起的程序实体,必须填操作系统可直接执行的二进制文件的实际路径。调试时CLion会给这个文件对应的进程附加调试器,普通运行时就直接启动这个程序。它不能是库文件,也不能填构建任务名,必须是磁盘上实际存在的可执行文件。
常见配置问题
两个选项不匹配很容易出奇怪的问题:
- 如果把库类target(比如
luajit)设为构建目标,又没指定正确的可执行文件路径,CLion会直接报「找不到可执行程序」的错误 - 如果Target和Executable不对应,比如Target选了
luajit,Executable选了fluent-bit的二进制,那你修改fluent-bit代码后点调试,CLion只会重新编译luajit,不会编译你改动过的fluent-bit代码,调试跑的永远是旧版本程序 - 一般选对可执行类型的Target后,CLion会自动填充对应的Executable路径,不需要手动修改,手动乱改很容易出现代码改了但运行的还是旧版本的问题。
内容的提问来源于stack exchange,提问作者binglong li
相关产品推荐
相关产品推荐

