今日做了一个Linux下makefile移植到windows的任务,踩了不少坑,在此记录一下,希望帮到广大的网友们。

基本的makefile语句如下,由target、dependency还有命令组成。

target: dependency
    echo 'makefile'
    ......
    shell language more

回归主题,makefile本身设计为跨平台了,在Linux与windows上使用makefile并没有什么区别。但问题在于makefile所有的命令都要调用shell来执行的,每一行的命令(如上面的 echo 'makefile')  都会调用一个shell进程进行解释。注意是每一行。

既然命令的调用shell来执行的,那么makefile跨平台的移植重点就在 shell命令的移植了。所以,所有的shell命令都要注意,不然分分钟报错“ 命令语法不正确 ”,不要想当然以为命令不可能有错。(:这在Linux上执行得好好的,为什么要windows下就不行了呢?)

在此列举一些Linux的bash 与 windows的cmd命令不一样的地方,由于代码在公司,我只好凭借记忆,大家体谅下;

  1. mkdir 命令在Linux下是有 mkdir -p 选项的,但是在windows下的cmd就没有,执行 mkdir -p $(dir),cmd会帮你创建 -p目录。
  2. for 语句是有挺大区别的。
  3. 还有一个很重要的就是文件的分割符号,windows下是 \,Linux下的  /,如果这两个斜杠没有统一好,很容易出现目录或文件找不到的错误
  1. 将所有bash命令改为windows的bat批处理命令,或者你可以在makefile中指定使用bash。
  2. 注意目录的分隔符,一个目录需要有同一的目录分隔符。
今日做了一个Linux下makefile移植到windows的任务,踩了不少坑,在此记录一下,希望帮到广大的网友们。基本的makefile语句如下,由target、dependency还有命令组成。target: dependency echo 'makefile' ...... shell language more回归主题,makefile本身设计为跨平台... windows 是del, 文件夹是rd,再不济是rd /s /q 其次是路径, linux 用/分割,wndows用\分割,切记,而且注意 windows 后面的\一定要删除掉,但是python却要求与 linux 相同。。。 然后是创建文件夹, linux 是mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录 windows 也是mkdir,但是注意删除-p 然后是复制, linux 是cp, windows 是copy
所要完成的 Makefile 文件描述了整个工程的编译、连接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文件、如何最后产生我们想要的可执行文件。尽管看起来可能是很复杂的事情,但是为工程编写 Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile 。 编译整个工...
<br /> makefile 判断文件存在如下的两种方法:<br />1. 调用shell的函数进行判断exist=$(shellif[-f$(FILE)];thenecho"exist";elseecho"notexist";fi;)ifeq(exist,"exist")#do something hereendif 当然,这个方法很土,但是能够工作!! 2. 使用 makefile 的函数进行判断 ifeq($(FILE),$(wildcard$(FILE)))#do something heree
当我们的工程需要跨平台时(一般都是 Linux Windows 双平台),写的CMake也会有所区别,所以需要判断当前的平台,执行不同的构建指令。Cmake本身提供了很多变量来判断当前的系统环境,如图下所示: (图片来自CMake适配多个操作系统( Windows Linux )_MKleee的博客-CSDN博客_cmake 操作系统) 我们查看几个变量在不同平台下CMake构建时的值有何不同 message("CMAKE_HOST_SYSTEM_NAME: ${CMAKE_HOST_SYSTEM_..
这几天用了几个开源第三方库,都是用Make来构建项目的。 Makefile 这玩意,本来是出自 Linux 系环境的,然后我一般都是开发Win32程序,所以要在 Windows 系统使用 Linux 系的东西确实一开始不太适应。 首先,MinGW环境是少不了的,这个是在 windows 系统下模拟 Linux 的开发工具链。但是一开始的误区是,我以为真的像文档说的那样make一下就完事了,事实上 Makefile 需要我们根
一、Make简介: 工程管理器,顾名思义,是指管理较多的文件,Make工程管理器也就是个“自动编译管理器”,这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量,同时,它通过读入 Makefile 文件文件的内容来执行大量的编译工作,Make将只编译改动的代码文件,而不用完全编译。 Makefile 文件一般和项目的其他源文件放在同一个目录下。在机器上可以同时存在许多不同的m...
### 回答1: Windows 交叉编译 Linux 程序需要使用交叉编译工具链,该工具链包含了 Linux 系统的头文件和库文件,可以在 Windows 环境下编译出可在 Linux 系统上运行的程序。具体步骤包括安装交叉编译工具链、配置环境变量、编写 Makefile 文件并进行编译。需要注意的是,不同的架构和操作系统需要使用不同的交叉编译工具链。 ### 回答2: 在进行 windows 交叉编译 linux 程序前,我们需要明确几个概念:编译器、交叉编译、目标架构、可执行文件格式。 1. 编译器 编译器是将源代码转换成可执行文件的工具。在进行交叉编译时,我们需要使用支持交叉编译的编译器。常用的有gcc、llvm等。 2. 交叉编译 交叉编译是指在一种操作系统上,使用编译器,将程序编译成可以在另一种操作系统上运行的程序。在进行 windows 交叉编译 linux 程序时,我们需要将源代码编译成适用于 linux 平台的可执行文件。 3. 目标架构 目标架构是指最终要运行的程序的硬件架构,如x86、ARM等。在进行交叉编译时,我们需要指定目标架构。 4. 可执行文件格式 可执行文件格式是指程序编译后生成的文件格式。在 linux 平台上,常用的格式有ELF,而在 Windows 平台上,常用的格式则是PE格式。在进行交叉编译时,我们需要选择适用于 linux 平台的可执行文件格式。 进行 windows 交叉编译 linux 程序的步骤如下: 1. 安装支持交叉编译的编译器,如MinGW、Cygwin等。 2. 在编译器中设置目标架构和可执行文件格式。根据实际情况选择对应的目标架构和可执行文件格式。 3. 编写源代码并进行编译。可以使用 Makefile 等工具进行编译。 4. 将生成的可执行文件拷贝到 linux 平台上进行测试和运行。 需要注意的是,在进行 windows 交叉编译 linux 程序时,可能会存在一些编译器和库的版本不兼容的问题,需要进行适当的调整和修改。同时,由于不同平台的系统调用和系统库不同,需要在编写源代码时尽可能避免使用平台相关的代码,或者做好适配工作。 ### 回答3: 交叉编译是指在一个平台上编写并生成用于在另一个不同的平台上运行的代码。在 Windows 上交叉编译 Linux 程序并非难事,只需按照以下步骤进行操作。 1. 在 Windows 上安装 Linux 交叉编译器和相关开发工具。可以使用cygwin等作为 Linux 的运行环境,也可以选择使用MinGW交叉编译器。 2. 编写源代码,并配置编译环境。需要在 Windows 上安装与 Linux 系统相同版本的头文件和库文件,以便可以在 Windows 上编译出 Linux 可执行文件。 3. 配置 makefile 文件,进行编译。 makefile 文件需要指定交叉编译器的路径和编译选项,以及链接库的路径和选项等。 4. 在 Windows 上使用交叉编译器进行编译。在使用交叉编译器时,需要先设置交叉编译器的环境变量,以便正确调用交叉编译器。 5. 复制生成的可执行文件到 Linux 系统上进行测试。将生成的可执行文件复制到 Linux 系统上,通过运行程序测试交叉编译的结果是否正确。 总体而言, Windows 交叉编译 Linux 程序需要具备一定的编程和 Linux 操作系统的知识,并且需要进行一些配置和调试工作。但是一旦掌握了这些技巧,成功交叉编译 Linux 程序将会对后续的 Linux 软件开发工作带来很大的便利。