大家好,我一直在尝试使用 make 和 Ubuntu 14.04 来实现构建的自动化
我已经创建了两个简单的程序
测试2
测试2.c
#include <stdio.h>
int main()
{
printf("%s","Built using make");
return 0;
}
和 test.exe
主程序
extern int print();
int _start()
{
print();
return 0;
}
测试文件
int print()
{
printf("%s","Built using make");
return 0;
}
Makefile
print:
gcc -Wall test.c -c -o test.o
gcc -Wall main.c -c -o main.o
ld -o test.exe test.o main.o -lc
test:
gcc -Wall test2.c -o test2.exe
我遇到的问题是终端无法使用该命令找到 test.exe,./test.exe
但可以使用./test2.exe
它给我的错误是bash: ./test.exe: No such file or directory
当它在目录中清晰可见时。
我正在调用 make print 来构建 test.exe 并调用 make test 来构建 test2.exe,为什么会发生这种情况
根据评论进行编辑ls ld test.exe 的输出是
ls: cannot access ld: No such file or directory
ls: cannot access test.exe: No such file or directory
输出make print
gcc -Wall test.c -c -o test.o
gcc -Wall main.c -c -o main.o
ld -o test.exe test.o main.o -lc Ant **
的输出make test
gcc -Wall test.c -o test2.exe
目录截图
ls 输出的屏幕截图
ls -q
输出
答案1
当你查看 Nautilus 中的文件列表(或ls
不带参数运行)时,它会显示一个文件,其名称出现成为test.exe
。
但是当您将test.exe
其作为参数传递给时ls
,它找不到它,并输出错误:
ls: cannot access test.exe: No such file or directory
最可能的解释是,该文件的名称显示为test.exe
,但这并不是它的实际名称。
当文件名称包含非打印字符。您可以通过运行 来验证这一假设ls -q
。如果显示包含一个或多个 的文件?
,其名称类似于test.exe
,则可确认问题存在。如果不是,则问题可能有其他原因。
由于您有一个图形桌面并且 Nautilus 显示该文件,因此解决问题的最简单方法可能是test.exe
在 Nautilus 中将其重命名。
在文件浏览器窗口中,右键单击名称为 的文件test.exe
。单击“重命名...”以编辑文件名。按Ctrl+A选择整个名称,然后按Delete或Backspace清除它。(或者只需开始输入新名称,它将覆盖它。)输入test.exe
。按Enter。
然后尝试再次运行您的程序。
如果这解决了问题,那么问题就立即出现了如何文件名中出现了非打印字符。由于文件名是在 中指定的Makefile
,所以您可能意外地在文本编辑器中粘贴或以其他方式输入了包含控制字符。
您可以移除并替换test.exe
以Makefile
修复那里的问题。
如果在 Nautilus 中重命名文件不是解决问题 - 或者如果ls -q
没有显示任何?
字符 - 请编辑您的问题以使用有关发生了什么的详细信息进行更新,然后继续解决问题。