“没有规则可以成为目标”将make -j与cmake一起使用时出错
当我使用 make -j时,出现没有规则可以使目标的错误。当我使用make(否-j)时,我没有得到错误。该库在一个目录中按以下方式构建:
When I use "make -j" I get a "No rule to make target" error. When I use make (no -j), I don't get the error. The library is built as follows in one directory:
add_library(Environment ${CXXSRCS}
并创建libEnvironment.a,在另一个目录中引用libEnvironment.a:
and libEnvironment.a is created. In another directory libEnvironment.a is referenced:
add_executable(GetEnv ${GETSRCS})
target_link_libraries(GetEnv
${tools_environment_SOURCE_DIR}/libEnvironment.a
xml++-2.6
)
当我使用 cmake -j运行时,出现错误然后创建了库,但是cmake停止,当我再次运行cmake -j时,一切都很高兴,因为已经创建了库。有什么想法吗?
When I run with "cmake -j", I get the error then the library gets created, but cmake stops. When I run cmake -j again, everything is happy because the library has been created. Any ideas?
何时 make -j
正在使用,任何目标都可以并行构建,除非一个目标被显式设置为另一个目标。
When make -j
is in use, any targets may be built in parallel unless one target is explicitely set as depended from another.
如果您有 GetEnv
(可执行)目标,该目标使用由 Environment $ c $生成的文件c>(库)目标,但是你h
In you case you have GetEnv
(executable) target which uses files, produced by Environment
(library) target. But you have no explicit dependencies between targets!
正确(最简单)的与库链接的方法是使用库目标名称而不是由该目标创建的库文件:
Correct (and the simplest) way for link with libraries is using library target name instead of library file, which is created by that target:
target_link_libraries(GetEnv Environment xml ++-2.6)
target_link_libraries(GetEnv Environment xml++-2.6)
这样,您将在 GetEnv
和 Environment
目标之间具有依赖关系,因此 make -j
将不再尝试并行构建它们。
Such a way you will have dependency between GetEnv
and Environment
targets, so make -j
will no longer attempt to build them in parallel.