You are not logged in.
About a year ago I had a fan that would toggle between 0RPM and 35RPM. It infuriated me. At the time I only found solutions that were dependent on Xorg Server. This eventually led me to the multitude of python based nvml solutions. I hate resource waste(python). So I quickly implemented a C based solution and over the last year have tinkered with it to bring it to its current state. I have 0 formal education in C(I just finished C Programming Language Second Edition). So I would like to request a once over on my genuine attempt to make something in a C way that others may find useful. Don't hesitate to be harsh.
Offline
Few minor changes I would suggest for the first half of the Makefile. Use the CFLAGS environment variable if set. Keep with convention $(CC) is the compiler executable without arguments. Use a distinct target name from that of the binary. make knows how to build an object file from a C source file with the same name so use that built in rule. Use LDFLAGS when linking.
diff --git a/Makefile b/Makefile
index 8d58c04..c63024b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,17 +1,15 @@
 DEBUG ?= 0
 
-CFLAGS = -Wall -g
+CFLAGS ?= -Wall -g
 
 ifeq ($(DEBUG), 1)
     CFLAGS += -DDEBUG
 endif
 
-CC=gcc $(CFLAGS)
+all: fanController-bin
 
-all: fanController
-
-fanController: fanController.c
-	$(CC) -o fanController fanController.c -lnvidia-ml 
+fanController-bin: fanController.o
+	$(CC) $(LDFLAGS) -o fanController fanController.o -lnvidia-ml
 
 install: fanController
 	sudo mv ./fanController /opt/fanControllerStill todo in the Makefile, use $DESTDIR, remove use of sudo, use install instead of cp, possibly use pkgconf. I do not have the time to review the C. From a very superficial glance you have the configuration hard coded in the C source which means the package must be rebuilt after configuration.
Offline
Use the CFLAGS environment variable if set.
Keep with convention $(CC) is the compiler executable without arguments.
Use a distinct target name from that of the binary.
make knows how to build an object file from a C source file with the same name so use that built in rule.
Use LDFLAGS when linking.
use $DESTDIR
remove use of sudo
use install instead of cp
Implemented.
possibly use pkgconf.
nvidia-ml does not provide a .pc
configuration hard coded in the C source which means the package must be rebuilt after configuration.
I struggled to find a config parser that wasn't overly complex for my use case of 2-4 key:value pairs.
I plan to use a TOML style config file and implement a function to import FanTargets and TempTargets, possibly also a PollingInterval and TempThreshold.
If you know of a simple library or implementation I could reference, or if I'm reinventing the wheel, please let me know.
Offline
LDFLAGS ?= -lnvidia-mlI would suggest moving that to LIBS othwise if LDFLAGS environment variable is set but does not contain '-lnvidia-ml' the link will fail.
Two things picked up by `-Wextra`:
fanController.c: In function ‘runTimeSanity’:
fanController.c:68:22: warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits]
   68 |   if (TempTargets[0] < 0) {
      |                      ^
fanController.c:76:21: warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits]
   76 |   if (FanTargets[0] < 0) {
      | One by `-Wpedantic`
fanController.c:34:30: warning: ISO C does not permit named variadic macros [-Wvariadic-macros]
   34 | #define DEBUG_PRINT(fmt, args...)                                              \
      |Which can be fixed by switching to __VA_ARGS__ (I also removed the noop implementation leaving it as expanding to nothing)
--- a/fanController.c
+++ b/fanController.c
@@ -28,12 +28,10 @@
 #include <unistd.h>
 
 #ifdef DEBUG
-#define DEBUG_PRINT(fmt, args...)                                              \
-  fprintf(stderr, "DEBUG: %s:%d: " fmt, __FILE__, __LINE__, ##args)
+#define DEBUG_PRINT(fmt, ...) \
+  fprintf(stderr, "DEBUG: %s:%d: " fmt, __FILE__, __LINE__, ##__VA_ARGS__)
 #else
-#define DEBUG_PRINT(fmt, args...)                                              \
-  do {                                                                         \
-  } while (0)
+#define DEBUG_PRINT(fmt, ...)
 #endif
 
 #define TEMP_THRESHOLD 2 // Degree celcius before actionOffline
-lnvidia-ml
-Wextra
-Wpedantic
fixed
Offline