Eclipse Makefile:跳过Make变量

时间:2015-06-09 13:22:00

标签: eclipse makefile

我有一个带有Makefile的项目,在Unix控制台上它工作正常,编译,构建,我可以在最后运行二进制文件。

我将项目导入Eclipse工作区,不知何故Eclipse的Makefile模块现在无法构建项目。它给出了以下错误:

g++: error: /src/main: No such file or directory

应该有

g++ -I $(APR_INCLUDE) -I $(CMS_HOME)/src/main 

使用两个make变量。我已将它们放在此行之前并将它们定义为:

export APR_INCLUDE=/usr/include/apr-1
export CMS_HOME=~/Desktop/activemq-cpp-library-3.8.4

相同的Makefile适用于控制台,但不适用于Eclipse,这很奇怪。

有什么想法吗?

这是我放置导出线的地方:

obstacleDetection_cpp: src/obstacleDetection.cpp protoc_middleman
    export APR_INCLUDE=/usr/include/apr-1
    export CMS_HOME=~/Desktop/activemq-cpp-library-3.8.4
    g++ -I  $(APR_INCLUDE) -I $(CMS_HOME)/src/main -g -o src/obstacleDetection.o -c src/obstacleDetection.cpp
    cd libs && cp $(CMS_HOME)/src/main/.libs/libactivemq-cpp.so.18.0.4 . && ln -sf libactivemq-cpp.so.18.0.4 libactivemq-cpp.so.18
    g++ -L $(CMS_HOME)/src/main/.libs/ -g -o bin/obstacleDetection src/obstacleDetection.o src-gen/Point.pb.cc src-gen/Point.pb.h -lactivemq-cpp -lssl -lprotobuf -pthread
    @echo "Success. Run the executable from the binary directory with: LD_LIBRARY_PATH=../libs/ ./obstacleDetection"

1 个答案:

答案 0 :(得分:2)

这是不对的:

obstacleDetection_cpp: src/obstacleDetection.cpp protoc_middleman
        export APR_INCLUDE=/usr/include/apr-1
        export CMS_HOME=~/Desktop/activemq-cpp-library-3.8.4
        g++ $(APR_INCLUDE) -I $(CMS_HOME)/src/main ...

配方中的所有行(即,在此目标上下文中使用TAB缩进的行)都将传递给shell。这些不是变量赋值。这有两个问题:

首先,配方中的每个逻辑行都传递给一个新的shell。这意味着对进程上下文的任何更改(例如环境或工作目录)仅在该逻辑行的持续时间内出现;一旦shell处理该行退出,所有这些更改都将丢失。因此,这些行没有任何影响:它们在shell中设置了一个环境变量,然后shell退出并且该设置已经消失。

其次,您在编译行中创建的变量引用(例如$(APR_INCLUDE))是 make 变量引用,而不是环境变量引用。因此,即使这些环境变量赋值仍然有效,也不会使用它们,因为这里没有引用环境变量。

您想要创建 make 变量赋值。这只能在食谱的完成。此外,您不需要导出它们,因为只需要看到它们(make会在调用shell之前展开它们)。所以,你的makefile应该是这样的:

APR_INCLUDE = /usr/include/apr-1
CMS_HOME = $(HOME)/Desktop/activemq-cpp-library-3.8.4

obstacleDetection_cpp: src/obstacleDetection.cpp protoc_middleman
        g++ -I  $(APR_INCLUDE) -I $(CMS_HOME)/src/main -g -o src/obstacleDetection.o -c src/obstacleDetection.cpp
        cd libs && cp $(CMS_HOME)/src/main/.libs/libactivemq-cpp.so.18.0.4 . && ln -sf libactivemq-cpp.so.18.0.4 libactivemq-cpp.so.18
        g++ -L $(CMS_HOME)/src/main/.libs/ -g -o bin/obstacleDetection src/obstacleDetection.o src-gen/Point.pb.cc src-gen/Point.pb.h -lactivemq-cpp -lssl -lprotobuf -pthread
        @echo "Success. Run the executable from the binary directory with: LD_LIBRARY_PATH=../libs/ ./obstacleDetection"