Windows中的$(shell [foo])

时间:2013-12-11 20:41:23

标签: windows shell makefile ros

我有一个makefile(一个名为'Makefile'的文件,它在Linux下由cmake运行,但在Windows中通过nmake工作我相信并且需要在VS命令提示符下运行。)

我能看到的大部分'样本'只是一行(其余的似乎是我尚未理解的东西,然后是同一行。

include $(shell rospack find mk)/cmake.mk

(在终端rospack中找到[package]返回所说包的路径,而cmake.mk显然是它要包含的文件)

我的问题是,这似乎(至少对我而言)要在Linux系统中使用(基本上整个ros,我正在使用的程序),而在Windows中这似乎只是试着

include /cmake.mk

(毫不奇怪,这不起作用)

基本上我需要知道如何在Windows中执行相同的操作,通常采用“动态”方式,因为如果我通过对目录路径进行硬编码来实现这一点,那么它只会导致更多问题。打破,因为它未来的某个时候没有正确设置)

所以我想如果这不可能或者特别难,那么硬编码的方法就是权宜之计。

我试过了:

include C:\[directory]\cmake.mk

但它似乎与':'

有问题

我正在尝试使用Windows,因为稍后在我的项目中,我将需要使用另一个程序(对于i90机器人),我们只支持Windows。

好的,显然如果文件实际上在文件夹中,它的行为会有所不同。 如在

include C:\[directory]\cmake.mk

的错误
C:\[directory]\cmake.mk not found

如果文件不存在,

fatal error U1034: syntax error : separator missing

如果是

虽然这似乎并没有真正影响原始问题,但我猜这表明我正在尝试做一些时髦的窗户不喜欢的东西。

1 个答案:

答案 0 :(得分:2)

简短的回答是,你永远不会得到一个makefile,它可以完成许多复杂的工作,既可以使用标准的UNIX风格的make(比如GNU / Linux的GNU make),也可以使用nmake。 Nmake是一个完全不同的野兽。

顺便说一句,令人困惑的是,你的makefile在这里被称为“cmake”,因为cmake是一个真正的程序,与make(和nmake)不同。不过,我假设从上下文中使用术语“cmake”并不是指实际的cmake实用程序。这太糟糕了,因为如果它确实使用了cmake,那对你来说会更简单。也许

但是,目前尚不清楚您对使用nmake的要求是什么。如果你列出了真正的要求,那么我们建议你会容易得多。例如,您说您需要使用仅在Windows上运行的“另一个程序”。这个程序究竟做了什么,你需要如何使用它?它是否提供需要与“ros”代码链接的库?

基本上,最简单的方法是为Windows系统获取类​​似UNIX的环境,包括GNU make等工具。有两个主要选择:Cygwin,提供完整的POSIX基础设施,包括shell,编译器等,它们是GNU环境到Windows的端口,但需要POSIX层,MinGW,它有各种GNU工具,或多或少本机运行在Windows上。

但是,如果你必须使用Visual Studio作为编译器,那么这些将更难集成。