小编stc*_*eng的帖子

如何使用makefile独立编译和更新一个文件夹中的所有文件

我有一个包含几个.cpp 文件的文件夹,例如A.cpp、B.cpp 和C.cpp。它们都是相互独立的。我可以将 A.cpp 编译为 Ao,然后编译为二进制文件 A。B.cpp 和 C.cpp 也是如此。

我想编写一个可以一次性编译所有这些文件的 makefile。并且以后如果有新的文件如D.cpp放入该文件夹中,makefile仍然可以自动处理。

我当前的文件是

CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=$(wildcard *.cpp)
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=$(SOURCES:.cpp=)

all: $(SOURCES) $(OBJECTS) $(EXECUTABLE)

$(OBJECTS): $(SOURCES)  
    $(CC) $(CFLAGS) $(@:.o=.cpp) -o $@

$(EXECUTABLE): $(SOURCES)
    $(CC) $(LDFLAGS) $(@:=.o) -o $@
Run Code Online (Sandbox Code Playgroud)

问题是,一旦一个 .cpp 文件被更改或添加到文件夹中,如果我执行 make,所有其他文件都将被更新并重新编译。

请让我知道如何解决这个问题。

谢谢。

c c++ makefile

2
推荐指数
1
解决办法
2299
查看次数

pthread如何返回最快的结果并终止较慢的结果?

我正在编写一个程序,主线程将创建三个子线程.这些线程同时运行,我想要做的是一旦子线程完成,我将检查输出是否正确.如果是,则终止另外两个线程; 如果没有,那么扔掉这个线程的结果并等待其他两个线程的结果.

我正在使用pthread_create在main函数中创建三个结果.但我不知道如何使用join函数.如果我在main函数中使用join函数三次,它只是一个接一个地等待,直到三个线程完成.

我的计划是这样的:

int return_value;

main(){
    pthread_create(&pid[0], NULL, fun0, NULL);
    pthread_create(&pid[1], NULL, fun1, NULL);
    pthread_create(&pid[2], NULL, fun2, NULL);

}

fun0(){
    ...
    if( check the result is right ){
      return_value = result;
      if (pid[1] is running)  pthread_kill( pid[1], SIGTERM );
      if (pid[2] is running)  pthread_kill( pid[2], SIGTERM );
    }

fun1() ...
fun2() ...
Run Code Online (Sandbox Code Playgroud)

函数0,1和2彼此相似,一旦一个函数有正确的答案,它将杀死另外两个线程.但是,在运行程序时,一旦处理了pthread_kill,整个程序就会终止,而不仅仅是一个线程.我不知道为什么.

我仍然不知道是否有其他方法来编写这个程序.谢谢你帮我解决了这个问题.

c multithreading pthreads

1
推荐指数
1
解决办法
160
查看次数

标签 统计

c ×2

c++ ×1

makefile ×1

multithreading ×1

pthreads ×1