我想做一个语言依赖目标.特别是:我有一个源文件,我想创建不同的对象,其中添加到相应的语言文件夹.单个源文件在C-Flags中会有所不同,编译器会得到.只要我以静态方式使用它,它就可以正常工作.
de/info.o en/info.o es/info.o : info.c
$(ECHO) (DEP) $< for $@
Run Code Online (Sandbox Code Playgroud)
现在我想,如果它有点动态,那将是很好的,以防我将添加一个新的语言依赖文件.所以我使用了一个通配符如下:
de/%.o en/%.o es/%.o : %.c
$(ECHO) (DEP) $< for $@
Run Code Online (Sandbox Code Playgroud)
但现在它只是制造了第一个目标而忽略了其余的目标.Make-Debug打印以下内容:
Successfully remade target file `de/info.o'.
Considering target file `en/info.o'.
File `en/info.o' was considered already.
Run Code Online (Sandbox Code Playgroud)
以防万一:不,对象不存在.所以没有目标,但是现有的依赖,所以make应该执行规则.
编辑:找到该问题的解决方案.
define FOO
$(1)/%.o : %.c
$(ECHO) $$< for $(1)
endef
$(foreach lang,$(LANGUAGE_LIST), $(eval $(call FOO,$(lang))))
Run Code Online (Sandbox Code Playgroud)
灵感来自:http://www.gnu.org/software/make/manual/make.html#Eval-Function
我尝试写一个网络服务器.就我而言,它适用于Windows.但是我想让它兼容Unix.而且我认为异常类的遗传问题一定存在问题.为了更好地理解,只需要重要的部分:
server.cpp
#include <exception>
#include <stdexcept>
#ifdef __unix__
#include "UnixSocket.h"
#elif __WIN32__ || _MSC_VER
#include "WinSocket.h"
#endif
#include "HTTPParser.h"
int main(void) {
try {
socket->socketInit(PORT);
}
catch (exception &e) {
cout << endl << "Exception: " << e.what() << endl;
socket->cleanAll();
}
return 0
}
Run Code Online (Sandbox Code Playgroud)
NetInterface.h
class NetInterface : public exception {
private:
public:
virtual void socketInit(const char *port) = 0;
virtual void cleanAll(void) = 0;
virtual void cleanPersCon(void) = 0;
virtual char *akzeptieren(void) = 0;
virtual void empfangen(void) = …Run Code Online (Sandbox Code Playgroud)