标签: makefile

自动设置多核机器的作业(-j)标志?

我在一台拥有大量核心的机器上有一个Makefile,但是-jX在编译我的项目时我似乎总是忘记编写它需要的时间比它应该的长.

有没有什么方法可以-j通过环境变量或其他一些持久性配置文件设置标志,以便make在这台机器上自动并行执行多个作业?

parallel-processing makefile build-script

59
推荐指数
6
解决办法
4万
查看次数

找不到CMAKE_MAKE_PROGRAM

我已经用Cmake到达了绳子的尽头; 它有很大的潜力,但我似乎无法让它找到基本的系统工具(即"制造")才能发挥作用.

症状

Cmake和Cmake GUI生成以下内容(删除CMakeCache.txt文件后):

Processing top-level CMakelists.txt for project swb
CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles".
CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
Run Code Online (Sandbox Code Playgroud)

我正专注于在这个问题中找到"make",但是,我也遇到了很多相同的问题,CMake无法找到库和其他实用程序文件(链接器,nm,ar等).我在下面列出的技术似乎使CMake能够在Linux下运行时找到这些文件.

系统

Windows 7(64位); MinGW的多个版本(32位/ 64位); Cmake 2.8.4; NONSTANDARD为MinGW安装位置(c:/ MinGW-32).

我做过的事情

1)CMakelists.txt在文件的前10行中包含"SET(CMAKE_MAKE_PROGRAM c:/MinGW-32/bin/make.exe FORCE)".

2)以前版本的CMakelists.txt包含:

find_program(CMAKE_MAKE_PROGRAM
  NAMES make
        make.exe
  DOC "Find a suitable make program for building under Windows/MinGW"
  HINTS c:/MinGW-32/bin )  
Run Code Online (Sandbox Code Playgroud)

3)在运行CMake或CMake-GUI之前,在cmd.exe环境变量中设置CMAKE_MAKE_PROGRAM.

4)使用标识CMAKE_MAKE_PROGRAM以及CMAKE_C_COMPILER等的"工具链"文件.

一件事已经工作

如果我使用GUI填充CMAKE_MAKE_PROGRAM变量("C:/MinGW-32/bin/make.exe"),CMake将成功创建构建文件.

问题(S)

如果我通过GUI识别make程序的名称,我可以让CMake工作.如何让CMake无需用户干预Windows 7(64位)/ MinGW组合即可找到我的make程序?

mingw makefile cmake

59
推荐指数
6
解决办法
11万
查看次数

makefile - 一次编译所有c文件

我想尝试GCC整个程序优化.为此,我必须立即将所有C文件传递给编译器前端.但是,我使用makefile来自动化我的构建过程,而且在makefile魔术方面我不是专家.

如果我想使用一次GCC调用来编译(甚至链接),我该如何修改makefile?

供参考 - 我的makefile如下所示:

LIBS  = -lkernel32 -luser32 -lgdi32 -lopengl32
CFLAGS = -Wall

OBJ = 64bitmath.o    \
      monotone.o     \
      node_sort.o    \
      planesweep.o   \
      triangulate.o  \
      prim_combine.o \
      welding.o      \
      test.o         \
      main.o

%.o : %.c
    gcc -c $(CFLAGS) $< -o $@

test: $(OBJ)
    gcc -o $@ $^ $(CFLAGS) $(LIBS)
Run Code Online (Sandbox Code Playgroud)

c makefile

58
推荐指数
2
解决办法
10万
查看次数

如何让Makefile重新编译已更改的文件?

我一直在努力让make只编译已经编辑过的文件.但是我没有太大成功,所有文件都被重新编译.有人能解释一下为什么吗?

我的文件是:

main.c
a_functions.c
Run Code Online (Sandbox Code Playgroud)

其中main.c包含main.ha_functions.c包含

这是我的makefile:

CC=gcc
CFLAGS=-Wall -I. -c
EXEC_FILE=program1


all: program

a_functions.o: a_functions.c
a_functions.c: a.h
main.o: main.c
main.c: main.h

objects: a_functions.c main.c
    $(CC) a_functions.c main.c $(CFLAGS)

program: a_functions.o main.o
    $(CC) a_functions.o main.o -o $(EXEC_FILE)
Run Code Online (Sandbox Code Playgroud)

根据建议更改makefile似乎有同样的问题::

all: program

a_functions.o: a_functions.c a.h
    gcc a_functions.c -c

main.o: main.c main.h
    gcc main.c -c

program: a_functions.o main.o
    gcc a_functions.o main.o -o program1
Run Code Online (Sandbox Code Playgroud)

c makefile recompile

58
推荐指数
2
解决办法
6万
查看次数

使用Makefile在编译中排除源文件

是否可以在Makefile中使用通配符函数在编译过程中排除源文件?

就像有几个源文件一样

src/foo.cpp
src/bar.cpp
src/...
Run Code Online (Sandbox Code Playgroud)

然后在我的makefile中,

SRC_FILES = $(wildcard src/*.cpp)
Run Code Online (Sandbox Code Playgroud)

但我想排除bar.cpp.这可能吗?

c++ makefile

58
推荐指数
4
解决办法
4万
查看次数

"make install"和"make altinstall"之间的细节差异

这是我的情况:

我正在使用Ubuntu 10.04(Lucid Lynx).系统的默认Python是v2.6.5,但我需要Python v2.7.所以我从python.org下载了源代码并尝试安装它.

我第一次安装它时,我跑了:

cd Python2.7.4
./configure --prefix=/usr
make
su root
make install
Run Code Online (Sandbox Code Playgroud)

这会将Python 2.7安装到我的系统中.它将创建一个链接,"python",也/usr/bin链接到.因此,当我输入时,系统将为我启动Python 2.7.4,就像我输入时一样.python2.7/usr/bin>python>python2.7

但是当我以这种方式安装时:

cd Python2.7.4
./configure --prefix=/usr
make
su root
make altinstall
Run Code Online (Sandbox Code Playgroud)

链接"python" /usr/bin仍然存在,并且链接到python2.6默认系统版本.当然,我可以删除它并创建一个链接到的新软链接python2.7.

除了链接之外,命令"make install"和"make altinstall"之间有什么区别/usr/bin

install makefile

58
推荐指数
2
解决办法
5万
查看次数

如何强制gnumake文件中的错误

我想在我的makefile中检测一个工具是错误版本的条件,并强制make失败,并显示一条错误消息,指出该项目不是正确的版本.

谁能举个例子呢?

我尝试了以下但是它不是正确的语法:

ifeq "$(shell svnversion --version | sed s/[^0-9\.]*://)" "1.4"
$error("Bad svnversion v1.4, please install v1.6")
endif
Run Code Online (Sandbox Code Playgroud)

谢谢.

makefile gnu-make

57
推荐指数
3
解决办法
6万
查看次数

如何将所有编译器的输出捕获到文件中?

我正在Linux中从源代码(CPP)构建一个开源项目.这是订单:

$CFLAGS="-g Wall" CXXFLAGS="-g Wall" ../trunk/configure --prefix=/somepath/ --host=i386-pc --target=i386-pc
$make
Run Code Online (Sandbox Code Playgroud)

编译时我收到很多编译器警告.我想开始修复它们.我的问题是如何捕获文件中的所有编译器输出?

$make > file没有做好这份工作.它只是保存编译器命令,就像g++ -someoptions /asdf/xyz.cpp我想要输出这些命令执行一样.

linux shell makefile g++ io-redirection

57
推荐指数
6
解决办法
9万
查看次数

构建和构建OCaml项目的首选方法是什么?

对于生态系统的新手来说,目前尚不清楚构建和管理中小型OCaml项目的规范首选方式.我理解ocamlc&c.的基础知识- 它们反映了传统的UNIX C编译器,看起来很简单.但是,高于单个文件的一次性编译水平,目前还不清楚如何最好地简单干净地管理编译.问题不是寻找潜在的工具,而是通过社区的经验验证一种或几种正确的(足够的)方法来构建和构建标准的OCaml项目.

我的模型用例是一个适度但非常重要的项目,纯OCaml或OCaml加上C依赖项.这样一个项目:

  1. 包含许多源文件
  2. 链接到许多标准库
  3. 链接到一个或多个第三方库
  4. 可选地包括C库和OCaml包装器作为子项目(尽管这也可以单独管理并作为第三方库包含,如(3)中所示)

几个替代工具脱颖而出:

  • 自定义Makefile似乎是大多数开源OCaml包中的通用标准,但看起来令人沮丧的冗长和复杂 - 甚至比适度的C/C++项目更令人沮丧.更糟糕的是,许多甚至看似简单的OCaml库层都将autoconf/automake置于顶层,以实现更高的复杂性.
  • ocamlbuild似乎提供了一种现代化,简化的机制,可以使用最少的配置自动化构建,但是对于新手来说没有很好的文档记录,在OCaml生态系统的介绍性材料中也没有示例,也没有被各种已发布的OCaml项目明显使用.我一直在寻找灵感.
  • OASIS似乎是其他构建系统顶层的约定和库代码层,以支持构建包管理器和库,如Cabal.

(我也看过OMake,它似乎是一个自封的" make++",它还包括一套常用语言的标准规则,包括OCaml和ocaml- makenéeOCamlMakefile,为GNU提供标准规则的模板make.)

这些都是管理OCaml构建的首选现代方式吗?

项目文件的结构如何最佳?

如何包含和管理第三方库依赖项?是首选在系统级别安装它们,还是有一种标准和直接的方式在本地管理项目?我更喜欢一种模式,其中项目尽可能保持独立.

ocaml makefile build ocamlbuild

57
推荐指数
4
解决办法
6297
查看次数

Hunk#1在1.失败这是什么意思?

运行时出现以下错误make,我不知道它意味着什么或者该怎么做.任何人都可以照亮我或指向正确的方向吗?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch
patching file Makefile.am
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej
make: *** [dvdnav] Error 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试为win32交叉编译VLC(使用linux).

makefile vlc cross-compiling

57
推荐指数
3
解决办法
9万
查看次数