어리석은 질문이 있을지 모르지만 어리석은 질문을 드리겠습니다 ... 파일 matrix.hpp
및 matrix.cpp
이 있다고 가정 해 봅시다. 그 파일에서 나는 어떤 조건이 존중되는지 확인하기 위해 assert(...)
을 사용합니다. 이 파일을 컴파일하고 matrix.o
파일을 만듭니다. 이제 나는 많은 다른 프로그램에서이 matrix.o
파일을 사용할 것입니다. 그 중 일부는 테스트 일 뿐이므로 assert(...)
조건을 확인해야하고, 다른 프로그램은 이러한 검사가 필요없는 프로그램을 작동하고 있습니다.C++ 연결 및 컴파일 플래그
내 질문은 : -DNDEBUG
플래그없이 matrix.o
을 컴파일 할 수 있습니까? 따라서 일반적으로 assert(...)
조건이 검사됩니다. 그러나 내가 체크를 필요로하지 않는 프로그램을위한 .o 파일을 링크 할 때 나는 matrix.o
파일을 다시 컴파일하지 않고이 플래그를 추가한다. 확인 답변에 감사드립니다
# the test program with the "assert(..)" checks
test:test.o matrix.o
gcc -o [email protected] $^
test.o:test.cpp matrix.hpp
gcc -c $^
# the real program without the "assert(..)" checks
prog:prog.o matrix.o
gcc -o [email protected] $^ -DNDEBUG
prog.o:prog.cpp matrix.hpp
gcc -c -DNDEBUG $^
# the matrix.o that can be either checked or not if the -DNDEBUG flag
# is given when the .o files are linked
matrix.o:matrix.cpp matrix.hpp
gcc -c $^
을 :
이 내가 원하는 것을 할 것, 더 정확하게하려면! 그래서 나는 단순히 플래그 -DNDEBUG를 사용하여 그렇게 할 수 없습니다.
#ifdef CHECK
assert(...)
#endif
와 내가 "테스트"프로그램을 컴파일 할 때 지금은 아니지만 "프로그램"으로 체크 플래그를 사용하면 어떻게 내가 매트릭스 파일에 "(...) 주장"사용할 때마다 내가 추가 프로그램? 나는 그것도 작동하지 않을 것 같아요 ...
내가 관련 있다고 생각하는 두 가지 질문 : http://stackoverflow.com/questions/8035394/gnu-make-how-to-make-conditional-cflags 차례로 http://stackoverflow.com/questions/을 참조하십시오. 5129577/makefile-define-compilation-variables-based-on-target-for/5153406 # 5153406 –